You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/06/23 12:10:45 UTC
svn commit: r1138809 - in /commons/sandbox/runtime/trunk/src/main/native:
Makefile.msc.in Makefile.unx.in os/unix/selectset.c shared/select.c
Author: mturk
Date: Thu Jun 23 10:10:45 2011
New Revision: 1138809
URL: http://svn.apache.org/viewvc?rev=1138809&view=rev
Log:
Add shared select native impl
Added:
commons/sandbox/runtime/trunk/src/main/native/os/unix/selectset.c (with props)
commons/sandbox/runtime/trunk/src/main/native/shared/select.c (with props)
Modified:
commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in
Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=1138809&r1=1138808&r2=1138809&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Thu Jun 23 10:10:45 2011
@@ -127,6 +127,7 @@ LIBSOURCES=\
$(TOPDIR)\shared\observer.c \
$(TOPDIR)\shared\reflect.c \
$(TOPDIR)\shared\sbuf.c \
+ $(TOPDIR)\shared\select.c \
$(TOPDIR)\shared\selectkey.c \
$(TOPDIR)\shared\sliceptr.c \
$(TOPDIR)\shared\ssock.c \
Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in?rev=1138809&r1=1138808&r2=1138809&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in Thu Jun 23 10:10:45 2011
@@ -71,7 +71,7 @@ UNIX_SOURCES=\
$(TOPDIR)/os/unix/posixapi.c \
$(TOPDIR)/os/unix/procmutex.c \
$(TOPDIR)/os/unix/shmem.c \
- $(TOPDIR)/os/unix/select.c \
+ $(TOPDIR)/os/unix/selectset.c \
$(TOPDIR)/os/unix/semaphore.c \
$(TOPDIR)/os/unix/time.c \
$(TOPDIR)/os/unix/usock.c \
@@ -124,6 +124,7 @@ LIBSOURCES=\
$(TOPDIR)/shared/reflect.c \
$(TOPDIR)/shared/sbuf.c \
$(TOPDIR)/shared/sliceptr.c \
+ $(TOPDIR)/shared/select.c \
$(TOPDIR)/shared/selectkey.c \
$(TOPDIR)/shared/ssock.c \
$(TOPDIR)/shared/string.c \
Added: commons/sandbox/runtime/trunk/src/main/native/os/unix/selectset.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/selectset.c?rev=1138809&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/selectset.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/selectset.c Thu Jun 23 10:10:45 2011
@@ -0,0 +1,71 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr/clazz.h"
+#include "acr/memory.h"
+#include "acr/jniapi.h"
+#include "acr/port.h"
+#include "acr/time.h"
+#include "acr/iodefs.h"
+#include "acr/netapi.h"
+#include "arch_opts.h"
+#if HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+/* pollset operation states */
+#define PSS_DESTROY 1
+#define PSS_POLL 2
+#define PSS_WAIT 3
+#define PSS_WAKEUP 4
+
+ACR_NET_EXPORT(jint, SocketSelectorFactory, type0)(JNI_STDARGS)
+{
+ return PS_DEFAULT_TYPE;
+}
+
+ACR_NET_EXPORT(jint, LocalSelectorFactory, type0)(JNI_STDARGS)
+{
+ return PS_DEFAULT_LOCAL;
+}
+
+static int rlimit_nofile(void)
+{
+ int nm = 65536;
+#if HAVE_SYS_RESOURCE_H
+ struct rlimit rl;
+
+ if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_max != RLIM_INFINITY)
+ nm = (int)rl.rlim_max;
+ else
+#endif
+ nm = (int)sysconf(_SC_OPEN_MAX);
+ if (nm > 1)
+ --nm;
+ else
+ nm = 1023;
+ return nm;
+}
+
+ACR_NET_EXPORT(jint, SocketSelectorFactory, size0)(JNI_STDARGS)
+{
+ return rlimit_nofile();
+}
+
+ACR_NET_EXPORT(jint, LocalSelectorFactory, size0)(JNI_STDARGS)
+{
+ return rlimit_nofile();
+}
Propchange: commons/sandbox/runtime/trunk/src/main/native/os/unix/selectset.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/native/shared/select.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/select.c?rev=1138809&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/select.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/select.c Thu Jun 23 10:10:45 2011
@@ -0,0 +1,199 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr/clazz.h"
+#include "acr/memory.h"
+#include "acr/jniapi.h"
+#include "acr/port.h"
+#include "acr/time.h"
+#include "acr/iodefs.h"
+#include "acr/netapi.h"
+#include "arch_opts.h"
+
+ACR_NET_EXPORT(jint, Select, wait0)(JNI_STDARGS, jlongArray fdset,
+ jshortArray events, jshortArray revents,
+ jint nevents, jint timeout)
+{
+ int ns, i;
+ int nmax = -1;
+#if !defined(WINDOWS)
+ acr_time_t tmx = 0;
+#endif
+ acr_fd_t *fd;
+ struct timeval tv;
+ struct timeval *tp = 0;
+ fd_set rdset, wrset, exset;
+ jshort *pevents;
+ jlong *pfdset;
+
+#if defined(FD_SETSIZE)
+ if (nevents > FD_SETSIZE) {
+ ACR_THROW_NET_ERROR(ACR_EOVERFLOW);
+ return 0;
+ }
+#endif
+ FD_ZERO(&rdset);
+ FD_ZERO(&wrset);
+ FD_ZERO(&exset);
+
+ pfdset = JARRAY_CRITICAL(jlong, fdset);
+ pevents = JARRAY_CRITICAL(jshort, events);
+ for (i = 0; i < nevents; i++) {
+ fd = J2P(pfdset[i], acr_fd_t *);
+#if defined(FD_SETSIZE)
+# if !defined(WINDOWS)
+ if (fd->u.s > FD_SETSIZE) {
+ RELEASE_CRITICAL(events, pevents);
+ RELEASE_CRITICAL(fdset, pfdset);
+ ACR_THROW_NET_ERROR(ACR_ERANGE);
+ return 0;
+ }
+# endif
+#endif
+ if (pevents[i] & ACR_OP_INP) {
+ FD_SET(fd->u.s, &rdset);
+ }
+ if (pevents[i] & ACR_OP_OUT) {
+ FD_SET(fd->u.s, &wrset);
+ }
+ if (pevents[i] & ~(ACR_OP_INP | ACR_OP_OUT)) {
+ FD_SET(fd->u.s, &exset);
+ }
+ if (fd->u.f > nmax)
+ nmax = fd->u.f;
+ }
+ RELEASE_CRITICAL(events, pevents);
+ if (timeout > 0) {
+#if !defined(WINDOWS)
+ tmx = AcrTimeNow() + AcrTimeFromMsec(timeout);
+#endif
+ tp = &tv;
+ }
+ for (;;) {
+ if (timeout > 0) {
+ acr_time_t us = AcrTimeFromMsec(timeout);
+ tv.tv_sec = (long)AcrTimeSec(us);
+ tv.tv_usec = (long)AcrTimeUsec(us);
+ }
+ ns = select(nmax + 1, &rdset, &wrset, &exset, tp);
+#if !defined(WINDOWS)
+ if (ns == -1 && errno == EINTR) {
+ if (timeout >= 0) {
+ timeout = tmx - AcrTimeNow();
+ if (timeout <= 0) {
+ ns = 0;
+ break;
+ }
+ }
+ }
+ else
+#endif
+ break;
+ }
+ if (ns == -1) {
+ ACR_THROW_NET_ERRNO();
+ RELEASE_CRITICAL(fdset, pfdset);
+ return 0;
+ }
+ pevents = JARRAY_CRITICAL(jshort, revents);
+ for (i = 0; i < nevents; i++) {
+ fd = J2P(pfdset[i], acr_fd_t *);
+ pevents[i] = 0;
+ if (FD_ISSET(fd->u.s, &rdset)) {
+ pevents[i] |= ACR_OP_INP;
+ }
+ if (FD_ISSET(fd->u.s, &wrset)) {
+ pevents[i] |= ACR_OP_OUT;
+ }
+ if (FD_ISSET(fd->u.s, &exset)) {
+ pevents[i] |= ACR_OP_ERROR;
+ }
+ }
+ RELEASE_CRITICAL(revents, pevents);
+ RELEASE_CRITICAL(fdset, pfdset);
+ return ns;
+}
+
+ACR_NET_EXPORT(jshort, Select, wait1)(JNI_STDARGS, jlong fp,
+ jshort events, jint timeout)
+{
+ int ns;
+#if !defined(WINDOWS)
+ acr_time_t tmx = 0;
+#endif
+ acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ struct timeval tv;
+ struct timeval *tp = 0;
+ fd_set rdset, wrset, exset;
+
+ FD_ZERO(&rdset);
+ FD_ZERO(&wrset);
+ FD_ZERO(&exset);
+
+ if (events & ACR_OP_INP) {
+ FD_SET(fd->u.s, &rdset);
+ }
+ if (events & ACR_OP_OUT) {
+ FD_SET(fd->u.s, &wrset);
+ }
+ if (events & ~(ACR_OP_INP | ACR_OP_OUT)) {
+ FD_SET(fd->u.s, &exset);
+ }
+ if (timeout > 0) {
+#if !defined(WINDOWS)
+ tmx = AcrTimeNow() + AcrTimeFromMsec(timeout);
+#endif
+ tp = &tv;
+ }
+ for (;;) {
+ if (timeout > 0) {
+ acr_time_t us = AcrTimeFromMsec(timeout);
+ tv.tv_sec = (long)AcrTimeSec(us);
+ tv.tv_usec = (long)AcrTimeUsec(us);
+ }
+ ns = select(fd->u.s + 1, &rdset, &wrset, &exset, tp);
+#if !defined(WINDOWS)
+ if (ns == -1 && errno == EINTR) {
+ if (timeout >= 0) {
+ timeout = tmx - AcrTimeNow();
+ if (timeout <= 0) {
+ ns = 0;
+ break;
+ }
+ }
+ }
+ else
+#endif
+ break;
+ }
+ if (ns == -1) {
+ ACR_THROW_NET_ERRNO();
+ return 0;
+ }
+ else {
+ jshort rv = 0;
+ if (FD_ISSET(fd->u.s, &rdset)) {
+ rv |= ACR_OP_INP;
+ }
+ if (FD_ISSET(fd->u.s, &wrset)) {
+ rv |= ACR_OP_OUT;
+ }
+ if (FD_ISSET(fd->u.s, &exset)) {
+ rv |= ACR_OP_ERROR;
+ }
+ return rv;
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/native/shared/select.c
------------------------------------------------------------------------------
svn:eol-style = native