From 905bcea24412bd2a50da67f6df20c93c76a004b8 Mon Sep 17 00:00:00 2001 From: chegar Date: Tue, 4 Mar 2014 13:27:55 +0000 Subject: [PATCH] 8036584: Review comments from 8035897 Reviewed-by: alanb --- .../native/java/net/PlainDatagramSocketImpl.c | 32 +++++++++++-------- src/solaris/native/java/net/PlainSocketImpl.c | 7 ++-- .../native/java/net/SocketInputStream.c | 8 ++--- src/solaris/native/java/net/bsd_close.c | 7 ++-- src/solaris/native/java/net/linux_close.c | 4 +-- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/src/solaris/native/java/net/PlainDatagramSocketImpl.c index 9da9104aa..86c3a7040 100644 --- a/src/solaris/native/java/net/PlainDatagramSocketImpl.c +++ b/src/solaris/native/java/net/PlainDatagramSocketImpl.c @@ -509,8 +509,7 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this, JNU_ThrowNullPointerException(env, "Null address in peek()"); } 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"); @@ -518,6 +517,8 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this, } else if (ret == JVM_IO_ERR) { 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"); } @@ -612,22 +613,24 @@ Java_java_net_PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this, 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 == JVM_IO_ERR) { + 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 - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); + } else { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); #endif + } return -1; } else if (ret == JVM_IO_INTR) { JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", @@ -831,23 +834,24 @@ Java_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this, 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 == JVM_IO_ERR) { + 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 - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); + } else { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); #endif + } } else if (ret == JVM_IO_INTR) { JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", "operation interrupted"); diff --git a/src/solaris/native/java/net/PlainSocketImpl.c b/src/solaris/native/java/net/PlainSocketImpl.c index 812c4b991..5fed0700c 100644 --- a/src/solaris/native/java/net/PlainSocketImpl.c +++ b/src/solaris/native/java/net/PlainSocketImpl.c @@ -704,11 +704,10 @@ Java_java_net_PlainSocketImpl_socketAccept(JNIEnv *env, jobject this, /* 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"); @@ -716,6 +715,8 @@ Java_java_net_PlainSocketImpl_socketAccept(JNIEnv *env, jobject this, } else if (ret == JVM_IO_ERR) { 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"); } diff --git a/src/solaris/native/java/net/SocketInputStream.c b/src/solaris/native/java/net/SocketInputStream.c index 66ff3e2cf..864326295 100644 --- a/src/solaris/native/java/net/SocketInputStream.c +++ b/src/solaris/native/java/net/SocketInputStream.c @@ -100,16 +100,16 @@ Java_java_net_SocketInputStream_socketRead0(JNIEnv *env, jobject this, } 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 == JVM_IO_ERR) { 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", "select/poll failed"); diff --git a/src/solaris/native/java/net/bsd_close.c b/src/solaris/native/java/net/bsd_close.c index c8bb25639..5ec3bea43 100644 --- a/src/solaris/native/java/net/bsd_close.c +++ b/src/solaris/native/java/net/bsd_close.c @@ -38,8 +38,6 @@ #include #include -#include "jni_util.h" - /* * Stack allocated by thread when doing blocking operation */ @@ -346,7 +344,7 @@ int NET_Select(int s, fd_set *readfds, fd_set *writefds, * 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; @@ -389,8 +387,7 @@ int NET_Timeout(JNIEnv *env, int s, long timeout) { 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; } diff --git a/src/solaris/native/java/net/linux_close.c b/src/solaris/native/java/net/linux_close.c index 1198e0f82..2d3dfe2fb 100644 --- a/src/solaris/native/java/net/linux_close.c +++ b/src/solaris/native/java/net/linux_close.c @@ -36,8 +36,6 @@ #include #include -#include "jni.h" - /* * Stack allocated by thread when doing blocking operation */ @@ -326,7 +324,7 @@ int NET_Select(int s, fd_set *readfds, fd_set *writefds, * 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); -- GitLab