You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by re...@apache.org on 2010/09/29 07:38:27 UTC

svn commit: r1002480 - /harmony/enhanced/java/trunk/classlib/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java

Author: regisxu
Date: Wed Sep 29 05:38:27 2010
New Revision: 1002480

URL: http://svn.apache.org/viewvc?rev=1002480&view=rev
Log:
Apply fix for HARMONY-6662: Spin wait in StartTlsResponseImpl.java

Modified:
    harmony/enhanced/java/trunk/classlib/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java

Modified: harmony/enhanced/java/trunk/classlib/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java?rev=1002480&r1=1002479&r2=1002480&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/classlib/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java (original)
+++ harmony/enhanced/java/trunk/classlib/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java Wed Sep 29 05:38:27 2010
@@ -43,6 +43,12 @@ public class StartTlsResponseImpl extend
 
     private boolean isHandshaked = false; // is handshake finished
 
+    private static class HandshakeMonitor {
+        // for identify local locks.
+    };
+
+    private HandshakeMonitor handshakeMonitor = new HandshakeMonitor();
+
     private SSLSocket negotiatedSslSocket = null; // negotiated ssl socket
 
     @Override
@@ -85,14 +91,23 @@ public class StartTlsResponseImpl extend
         sslSocket
                 .addHandshakeCompletedListener(new HandshakeCompletedListener() {
                     public void handshakeCompleted(HandshakeCompletedEvent event) {
-                        isHandshaked = true;
+                        synchronized(handshakeMonitor) {
+                            isHandshaked = true;
+                            handshakeMonitor.notify();
+                        }
                     }
                 });
 
         sslSocket.startHandshake();
 
-        while (!isHandshaked) {
-            // Wait for handshake finish.
+        synchronized(handshakeMonitor) {
+            while (!isHandshaked) {
+                try {
+                    handshakeMonitor.wait();
+                } catch (InterruptedException e) {
+                    // continue the loop
+                }
+            }
         }
 
         HostnameVerifier defaultVerifier = new HostnameVerifier() {