This patch resolves a race condition between the receipt of
a connection established event and a receive completion from 
the client.  The server no longer goes to connected state but
merely waits for the READ_ADV state to begin its looping.  This
keeps the server from going back to CONNECTED from the later
states if the connection established event comes in after the
receive completion (i.e. the loop starts).

Signed-off-by: Boyd Faulkner <[EMAIL PROTECTED]>

Index: rping.c
===================================================================
--- rping.c     (revision 7960)
+++ rping.c     (working copy)
@@ -182,7 +182,13 @@
 
        case RDMA_CM_EVENT_ESTABLISHED:
                DEBUG_LOG("ESTABLISHED\n");
-               cb->state = CONNECTED;
+
+               /*
+                * Server will wake up when first RECV completes.
+                */
+               if (!cb->server) {
+                       cb->state = CONNECTED;
+               }
                sem_post(&cb->sem);
                break;
 
@@ -197,7 +203,7 @@
                break;
 
        case RDMA_CM_EVENT_DISCONNECTED:
-               fprintf(stderr, "DISCONNECT EVENT...\n");
+               fprintf(stderr, "%s DISCONNECT EVENT...\n", cb->server ? 
"server" : "client");
                sem_post(&cb->sem);
                break;
 
@@ -225,7 +231,7 @@
        DEBUG_LOG("Received rkey %x addr %" PRIx64 "len %d from peer\n",
                  cb->remote_rkey, cb->remote_addr, cb->remote_len);
 
-       if (cb->state == CONNECTED || cb->state == RDMA_WRITE_COMPLETE)
+       if (cb->state <= CONNECTED || cb->state == RDMA_WRITE_COMPLETE)
                cb->state = RDMA_READ_ADV;
        else
                cb->state = RDMA_WRITE_ADV;


-- 
Boyd R. Faulkner
Open Grid Computing, Inc.
Phone:  512-343-9196 x109
Fax:    512-343-5450

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to