changeset 659:abf3e1aa8031

6739920: java 6u4~ use larger C heap if there are many threads Reviewed-by: chegar
author michaelm
date Mon, 22 Sep 2008 15:53:58 +0100
parents 80fd09f239f4
children 976c7eb88476
files src/share/classes/java/net/AbstractPlainSocketImpl.java src/solaris/native/java/net/PlainSocketImpl.c
diffstat 2 files changed, 6 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/net/AbstractPlainSocketImpl.java	Mon Sep 15 00:41:02 2008 -0700
+++ b/src/share/classes/java/net/AbstractPlainSocketImpl.java	Mon Sep 22 15:53:58 2008 +0100
@@ -308,6 +308,12 @@
             FileDescriptor fd = acquireFD();
             try {
                 socketConnect(address, port, timeout);
+                /* socket may have been closed during poll/select */
+                synchronized (fdLock) {
+                    if (closePending) {
+                        throw new SocketException ("Socket closed");
+                    }
+                }
                 // If we have a ref. to the Socket, then sets the flags
                 // created, bound & connected to true.
                 // This is normally done in Socket.connect() but some
--- a/src/solaris/native/java/net/PlainSocketImpl.c	Mon Sep 15 00:41:02 2008 -0700
+++ b/src/solaris/native/java/net/PlainSocketImpl.c	Mon Sep 22 15:53:58 2008 +0100
@@ -491,27 +491,6 @@
         return;
     }
 
-    /*
-     * The socket may have been closed (dup'ed) while we were
-     * poll/select. In that case SO_ERROR will return 0 making
-     * it appear that the connection has been established.
-     * To avoid any race conditions we therefore grab the
-     * fd lock, check if the socket has been closed, and
-     * set the various fields whilst holding the lock
-     */
-    fdLock = (*env)->GetObjectField(env, this, psi_fdLockID);
-    (*env)->MonitorEnter(env, fdLock);
-
-    if ((*env)->GetBooleanField(env, this, psi_closePendingID)) {
-
-        /* release fdLock */
-        (*env)->MonitorExit(env, fdLock);
-
-        JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
-                            "Socket closed");
-        return;
-    }
-
     (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
 
     /* set the remote peer address and port */
@@ -536,11 +515,6 @@
             (*env)->SetIntField(env, this, psi_localportID, localport);
         }
     }
-
-    /*
-     * Finally release fdLock
-     */
-    (*env)->MonitorExit(env, fdLock);
 }
 
 /*