diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
index faec871..b75e3c6 100644
--- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
+++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
@@ -176,11 +176,13 @@
                         }
                         workingIncomingConnections.clear();
                     }
-                    if (!handshakeCompletedConnections.isEmpty()) {
-                        for (final PendingHandshakeConnection conn : handshakeCompletedConnections) {
-                            handshakeCompleted(conn);
+                    synchronized (handshakeCompletedConnections) {
+                        if (!handshakeCompletedConnections.isEmpty()) {
+                            for (final PendingHandshakeConnection conn : handshakeCompletedConnections) {
+                                handshakeCompleted(conn);
+                            }
+                            handshakeCompletedConnections.clear();
                         }
-                        handshakeCompletedConnections.clear();
                     }
                     if (n > 0) {
                         Iterator<SelectionKey> i = selector.selectedKeys().iterator();
@@ -297,8 +299,7 @@
             if (socketChannel.requiresHandshake()) {
                 asyncHandshake(conn);
             } else {
-                conn.handshakeSuccess = true;
-                handshakeCompletedConnections.add(conn);
+                handshakeCompleted(true, conn);
             }
         }
 
@@ -308,8 +309,7 @@
             if (socketChannel.requiresHandshake()) {
                 asyncHandshake(conn);
             } else {
-                conn.handshakeSuccess = true;
-                handshakeCompletedConnections.add(conn);
+                handshakeCompleted(true, conn);
             }
         }
 
@@ -319,11 +319,17 @@
         }
 
         private void handleHandshakeCompletion(Boolean handshakeSuccess, PendingHandshakeConnection conn) {
-            conn.handshakeSuccess = handshakeSuccess;
-            handshakeCompletedConnections.add(conn);
+            handshakeCompleted(handshakeSuccess, conn);
             selector.wakeup();
         }
 
+        private void handshakeCompleted(Boolean handshakeSuccess, PendingHandshakeConnection conn) {
+            conn.handshakeSuccess = handshakeSuccess;
+            synchronized (handshakeCompletedConnections) {
+                handshakeCompletedConnections.add(conn);
+            }
+        }
+
         private void connectionEstablished(TCPConnection connection) {
             synchronized (connectionListener) {
                 connectionListener.connectionEstablished(connection);
