--- 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;