DEVEL15-windows-server-ping-deadlock-20070612
authorJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 13 Jun 2007 07:38:39 +0000 (07:38 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 13 Jun 2007 07:38:39 +0000 (07:38 +0000)
avoid deadlock in cm_ServerPing due to volume status update code

(cherry picked from commit c74a23fc4043e28a138fe624b1aadf3af1ee8f6f)

src/WINNT/afsd/cm_server.c

index 7fedd97..89f7495 100644 (file)
@@ -131,6 +131,7 @@ cm_PingServer(cm_server_t *tsp)
             cm_volume_t * volp;
             int i;
 
+            lock_ReleaseMutex(&tsp->mx);
             for (tsrvp = tsp->vols; tsrvp; tsrvp = tsrvp->nextp) {
                 for (i=0; i<NUM_SERVER_VOLS; i++) {
                     if (tsrvp->ids[i] != 0) {
@@ -145,6 +146,7 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
+            lock_ObtainMutex(&tsp->mx);
         }
     } else {
        /* mark server as down */
@@ -163,6 +165,7 @@ cm_PingServer(cm_server_t *tsp)
             cm_volume_t * volp;
             int i;
 
+            lock_ReleaseMutex(&tsp->mx);
             for (tsrvp = tsp->vols; tsrvp; tsrvp = tsrvp->nextp) {
                 for (i=0; i<NUM_SERVER_VOLS; i++) {
                     if (tsrvp->ids[i] != 0) {
@@ -177,6 +180,7 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
+            lock_ObtainMutex(&tsp->mx);
         }
     }