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/05/03 15:45:56 UTC

svn commit: r1099052 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/Native.java native/shared/clazz.c native/shared/iofd.c native/shared/psockimpl.c

Author: mturk
Date: Tue May  3 13:45:55 2011
New Revision: 1099052

URL: http://svn.apache.org/viewvc?rev=1099052&view=rev
Log:
Add some JDK7 features

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java
    commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
    commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c
    commons/sandbox/runtime/trunk/src/main/native/shared/psockimpl.c

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java?rev=1099052&r1=1099051&r2=1099052&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java Tue May  3 13:45:55 2011
@@ -59,7 +59,8 @@ public final class Native
             try {
                 initialized = init0();
             } catch (Throwable t) {
-                // Ignore
+                if (HAS_MAINTAINER_MODE)
+                    t.printStackTrace();
             }
 
             if (!Platform.isSupported()) {

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c?rev=1099052&r1=1099051&r2=1099052&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c Tue May  3 13:45:55 2011
@@ -296,6 +296,7 @@ AcrLoadClass(JNI_STDENV, JAVA_C_ID *claz
          */
 #if defined(DEBUG) || defined(_DEBUG)
         fprintf(stderr, "Cannot find %s\n", clazz->n);
+        fflush(stderr);
         (*env)->ExceptionDescribe(env);
 #endif
         goto failed;
@@ -314,6 +315,7 @@ AcrLoadClass(JNI_STDENV, JAVA_C_ID *claz
         if (c == 0) {
 #if defined(DEBUG) || defined(_DEBUG)
             fprintf(stderr, "Cannot find %s\n", an);
+            fflush(stderr);
             (*env)->ExceptionDescribe(env);
 #endif
             goto failed;

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c?rev=1099052&r1=1099051&r2=1099052&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c Tue May  3 13:45:55 2011
@@ -67,7 +67,10 @@ ACR_CLASS_CTOR(FileDescriptor)
     if (AcrLoadClass(env, &_clazzn, 0) == JNI_FALSE)
         return JNI_FALSE;
     J_LOAD_METHOD(0000);
-    J_LOAD_METHOD(0001);
+    /* FileDescriptor(int) is not present in jdk7
+     * windows implementation. Load as optional.
+     */
+    J_LOPT_METHOD(0001);
     J_LOAD_IFIELD(0000);
 #if defined(WINDOWS)
     J_LOAD_IFIELD(0001);
@@ -167,21 +170,32 @@ jobject
 AcrNewFileDescriptor(JNI_STDENV, int fd, void *fh)
 {
     jobject fo;
+    jint    rc = ACR_ENOMEM;
 
     if (!CLAZZ_LOADED) {
         return 0;
     }
-    fo = (*env)->NewObject(env, _clazzn.i, J4MID(0001), fd);
-#if defined (WINDOWS)
+    if (J4MID(0001) != 0)
+        fo = (*env)->NewObject(env, _clazzn.i, J4MID(0001), fd);
+    else
+        fo = (*env)->NewObject(env, _clazzn.i, J4MID(0000));
     if (fo != 0) {
-        if (AcrSetFileDescriptorHandle(env, fo, fh) != 0) {
+        if (J4MID(0001) != 0)
+            rc = AcrSetFileDescriptorFd(env, fo, fd);
+        else
+            rc = 0;
+#if defined (WINDOWS)
+        if (rc == 0)
+            rc = AcrSetFileDescriptorHandle(env, fo, fh);
+#endif
+    }
+    if (rc != 0) {
+        if (fo != 0) {
             (*env)->DeleteLocalRef(env, fo);
             fo = 0;
         }
+        ACR_SET_OS_ERROR(rc);
     }
-#endif
-    if (fo == 0)
-        ACR_SET_OS_ERROR(ACR_ENOMEM);
     return fo;
 }
 

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/psockimpl.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/psockimpl.c?rev=1099052&r1=1099051&r2=1099052&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/psockimpl.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/psockimpl.c Tue May  3 13:45:55 2011
@@ -40,14 +40,56 @@ J_DECLARE_F_ID(0000) = {
     "Ljava/io/FileDescriptor;"
 };
 
+J_DECLARE_F_ID(0001) = {
+    INVALID_FIELD_OFFSET,
+    INVALID_FIELD_OFFSET,
+    0,
+    "fd1",
+    "Ljava/io/FileDescriptor;"
+};
+
+static jclass TwoStacksPlainSocketImplClass = 0;
+
 ACR_CLASS_CTOR(SocketImpl)
 {
+    jclass tsc;
+
     if (AcrLoadClass(env, &_clazzn, 0) == JNI_FALSE)
         return JNI_FALSE;
     J_LOAD_IFIELD(0000);
     UNSAFE_IFIELD(0000);
-
     _clazzn.u = 1;
+#if defined(WINDOWS)
+    /* Try to load the TwoStacksPlainSocketImpl
+     */
+    tsc = (*env)->FindClass(env, "java/net/TwoStacksPlainSocketImpl");
+    if (tsc == 0 || IS_EXCEPTION_PENDING(env)) {
+        (*env)->ExceptionClear(env);
+        printf("TwoStacksPlainSocketImplClass not found %p\n", tsc);
+        fflush(stdout);
+        tsc = 0;
+    }
+    else {
+        _f0001n.i = (*env)->GetFieldID(env, tsc, _f0001n.n, _f0001n.s);
+        if (_f0001n.i == 0) {
+            (*env)->ExceptionClear(env);                            
+        }
+        else {
+            TwoStacksPlainSocketImplClass = (jclass)(*env)->NewGlobalRef(env, tsc);
+            (*env)->DeleteLocalRef(env, tsc);
+            if (TwoStacksPlainSocketImplClass == 0) {
+                (*env)->ExceptionClear(env);
+                /* Reference failed */
+                _f0001n.i = 0;
+            }
+            else {
+                _f0001n.o = AcrUnsafeObjectFieldIdOffset(env, TwoStacksPlainSocketImplClass, _f0001n.i);                 
+                printf("TwoStacksPlainSocketImplClass loaded\n");
+                fflush(stdout);
+            }
+        }
+    }
+#endif
     return JNI_TRUE;
 }