changeset 23048:cf8cda42cd52

8036584: Review comments from 8035897 Reviewed-by: alanb
author chegar
date Tue, 04 Mar 2014 13:27:55 +0000
parents e7dcfb17bf53
children c66d7e7bcded
files jdk/src/aix/native/java/net/aix_close.c jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c jdk/src/solaris/native/java/net/PlainSocketImpl.c jdk/src/solaris/native/java/net/SocketInputStream.c jdk/src/solaris/native/java/net/bsd_close.c jdk/src/solaris/native/java/net/linux_close.c jdk/src/solaris/native/java/net/net_util_md.h jdk/src/solaris/native/java/net/solaris_close.c
diffstat 8 files changed, 38 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/jdk/src/aix/native/java/net/aix_close.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/aix/native/java/net/aix_close.c	Tue Mar 04 13:27:55 2014 +0000
@@ -63,8 +63,6 @@
 #include <errno.h>
 #include <sys/poll.h>
 
-#include "jni.h"
-
 /*
  * Stack allocated by thread when doing blocking operation
  */
@@ -384,7 +382,7 @@
  * Auto restarts with adjusted timeout if interrupted by
  * signal other than our wakeup signal.
  */
-int NET_Timeout(JNIEnv *unused, int s, long timeout) {
+int NET_Timeout(int s, long timeout) {
     long prevtime = 0, newtime;
     struct timeval t;
     fdEntry_t *fdEntry = getFdEntry(s);
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Tue Mar 04 13:27:55 2014 +0000
@@ -501,8 +501,7 @@
         return -1;
     }
     if (timeout) {
-        int ret = NET_Timeout(env, fd, timeout);
-        JNU_CHECK_EXCEPTION_RETURN(env, -1);
+        int ret = NET_Timeout(fd, timeout);
         if (ret == 0) {
             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
                             "Peek timed out");
@@ -510,6 +509,8 @@
         } else if (ret == -1) {
             if (errno == EBADF) {
                  JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+            } else if (errno == ENOMEM) {
+                 JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
             } else {
                  NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed");
             }
@@ -595,22 +596,24 @@
     packetBufferOffset = (*env)->GetIntField(env, packet, dp_offsetID);
     packetBufferLen = (*env)->GetIntField(env, packet, dp_bufLengthID);
     if (timeout) {
-        int ret = NET_Timeout(env, fd, timeout);
-        JNU_CHECK_EXCEPTION_RETURN(env, -1);
+        int ret = NET_Timeout(fd, timeout);
         if (ret == 0) {
             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
                             "Receive timed out");
             return -1;
         } else if (ret == -1) {
+            if (errno == ENOMEM) {
+                JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
 #ifdef __linux__
-            if (errno == EBADF) {
+            } else if (errno == EBADF) {
                 JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
             } else {
                 NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
+#else
+            } else {
+                JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+#endif
             }
-#else
-            JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-#endif
             return -1;
         }
     }
@@ -804,23 +807,24 @@
         retry = JNI_FALSE;
 
         if (timeout) {
-            int ret = NET_Timeout(env, fd, timeout);
+            int ret = NET_Timeout(fd, timeout);
             if (ret <= 0) {
-                if ((*env)->ExceptionCheck(env)) {
-                    // fall-through, to potentially free, then return
-                } else if (ret == 0) {
+                if (ret == 0) {
                     JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
                                     "Receive timed out");
                 } else if (ret == -1) {
+                    if (errno == ENOMEM) {
+                        JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
 #ifdef __linux__
-                    if (errno == EBADF) {
+                    } else if (errno == EBADF) {
                          JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-                     } else {
-                         NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
-                     }
+                    } else {
+                        NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
 #else
-                     JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+                    } else {
+                        JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
 #endif
+                    }
                 }
 
                 if (mallocedPacket) {
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c	Tue Mar 04 13:27:55 2014 +0000
@@ -670,11 +670,10 @@
         /* passing a timeout of 0 to poll will return immediately,
            but in the case of ServerSocket 0 means infinite. */
         if (timeout <= 0) {
-            ret = NET_Timeout(env, fd, -1);
+            ret = NET_Timeout(fd, -1);
         } else {
-            ret = NET_Timeout(env, fd, timeout);
+            ret = NET_Timeout(fd, timeout);
         }
-        JNU_CHECK_EXCEPTION(env);
         if (ret == 0) {
             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
                             "Accept timed out");
@@ -682,6 +681,8 @@
         } else if (ret == -1) {
             if (errno == EBADF) {
                JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+            } else if (errno == ENOMEM) {
+               JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
             } else {
                NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed");
             }
--- a/jdk/src/solaris/native/java/net/SocketInputStream.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/SocketInputStream.c	Tue Mar 04 13:27:55 2014 +0000
@@ -100,20 +100,20 @@
     }
 
     if (timeout) {
-        nread = NET_Timeout(env, fd, timeout);
+        nread = NET_Timeout(fd, timeout);
         if (nread <= 0) {
-            if ((*env)->ExceptionCheck(env)) {
-                // fall-through, to potentially free, then return
-            } else if (nread == 0) {
+            if (nread == 0) {
                 JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
                             "Read timed out");
             } else if (nread == -1) {
                 if (errno == EBADF) {
                      JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-                 } else {
-                     NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
+                } else if (errno == ENOMEM) {
+                    JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
+                } else {
+                    NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
                                                   "select/poll failed");
-                 }
+                }
             }
             if (bufP != BUF) {
                 free(bufP);
--- a/jdk/src/solaris/native/java/net/bsd_close.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/bsd_close.c	Tue Mar 04 13:27:55 2014 +0000
@@ -38,8 +38,6 @@
 #include <errno.h>
 #include <sys/poll.h>
 
-#include "jni_util.h"
-
 /*
  * Stack allocated by thread when doing blocking operation
  */
@@ -333,7 +331,7 @@
  * Auto restarts with adjusted timeout if interrupted by
  * signal other than our wakeup signal.
  */
-int NET_Timeout(JNIEnv *env, int s, long timeout) {
+int NET_Timeout(int s, long timeout) {
     long prevtime = 0, newtime;
     struct timeval t, *tp = &t;
     fd_set fds;
@@ -376,8 +374,7 @@
         int length = (howmany(s+1, NFDBITS)) * sizeof(int);
         fdsp = (fd_set *) calloc(1, length);
         if (fdsp == NULL) {
-            JNU_ThrowOutOfMemoryError(env, "NET_Select native heap allocation failed");
-            return 0;
+            return -1;   // errno will be set to ENOMEM
         }
         allocated = 1;
     }
--- a/jdk/src/solaris/native/java/net/linux_close.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/linux_close.c	Tue Mar 04 13:27:55 2014 +0000
@@ -36,8 +36,6 @@
 #include <errno.h>
 #include <sys/poll.h>
 
-#include "jni.h"
-
 /*
  * Stack allocated by thread when doing blocking operation
  */
@@ -314,7 +312,7 @@
  * Auto restarts with adjusted timeout if interrupted by
  * signal other than our wakeup signal.
  */
-int NET_Timeout(JNIEnv *unused, int s, long timeout) {
+int NET_Timeout(int s, long timeout) {
     long prevtime = 0, newtime;
     struct timeval t;
     fdEntry_t *fdEntry = getFdEntry(s);
--- a/jdk/src/solaris/native/java/net/net_util_md.h	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/net_util_md.h	Tue Mar 04 13:27:55 2014 +0000
@@ -34,7 +34,7 @@
 
 #include <sys/poll.h>
 
-int NET_Timeout(JNIEnv *env, int s, long timeout);
+int NET_Timeout(int s, long timeout);
 int NET_Read(int s, void* buf, size_t len);
 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
                  struct sockaddr *from, socklen_t *fromlen);
--- a/jdk/src/solaris/native/java/net/solaris_close.c	Fri Feb 28 13:38:51 2014 +0100
+++ b/jdk/src/solaris/native/java/net/solaris_close.c	Tue Mar 04 13:27:55 2014 +0000
@@ -28,8 +28,6 @@
 #include <stropts.h>
 #include <unistd.h>
 
-#include "jni.h"
-
 /* Support for restartable system calls on Solaris. */
 
 #define RESTARTABLE_RETURN_INT(_cmd) do {             \
@@ -88,7 +86,7 @@
     RESTARTABLE_RETURN_INT(poll(ufds, nfds, timeout));
 }
 
-int NET_Timeout(JNIEnv *unused, int s, long timeout) {
+int NET_Timeout(int s, long timeout) {
     int result;
     struct timeval t;
     long prevtime, newtime;