? patch.diff Index: org/jacorb/orb/giop/ClientGIOPConnection.java =================================================================== RCS file: /web/www.jacorb.org/cvs/jacorb/JacORB/src/org/jacorb/orb/giop/ClientGIOPConnection.java,v retrieving revision 1.18 diff -u -r1.18 ClientGIOPConnection.java --- org/jacorb/orb/giop/ClientGIOPConnection.java 14 Nov 2008 08:55:32 -0000 1.18 +++ org/jacorb/orb/giop/ClientGIOPConnection.java 15 Jan 2009 21:41:26 -0000 @@ -127,9 +127,9 @@ try { + getWriteLock(); synchronized (connect_sync) { - getWriteLock(); transport.close(); // We expect that the same transport can be reconnected // after a close, something that the ETF draft isn't Index: org/jacorb/orb/giop/GIOPConnection.java =================================================================== RCS file: /web/www.jacorb.org/cvs/jacorb/JacORB/src/org/jacorb/orb/giop/GIOPConnection.java,v retrieving revision 1.69 diff -u -r1.69 GIOPConnection.java --- org/jacorb/orb/giop/GIOPConnection.java 14 Nov 2008 08:55:32 -0000 1.69 +++ org/jacorb/orb/giop/GIOPConnection.java 15 Jan 2009 21:41:27 -0000 @@ -916,6 +916,7 @@ private final void sendMessage( MessageOutputStream out ) throws IOException { + boolean releaseWriteLockCalled = false; try { incPendingWrite (); @@ -937,7 +938,6 @@ try { transport.connect (profile, timeout); - connect_sync.notifyAll(); } catch (RuntimeException ex) { @@ -950,6 +950,9 @@ } throw ex; } + finally { + connect_sync.notifyAll(); + } } } @@ -988,6 +991,7 @@ // concurrently (unfortunately write lock is requested // during streamClosed()) releaseWriteLock(); + releaseWriteLockCalled = true; // It makes no sense to use this transport any longer // examples: firewall dropped connection silently, @@ -1001,7 +1005,9 @@ finally { decPendingWrite(); - releaseWriteLock(); + if (releaseWriteLockCalled == false) { + releaseWriteLock(); + } } }