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

src/WINNT/afsd/cm_server.c

index b64cab5..be93b1e 100644 (file)
@@ -127,6 +127,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) {
@@ -141,6 +142,7 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
+            lock_ObtainMutex(&tsp->mx);
         }
     } else {
        /* mark server as down */
@@ -159,6 +161,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) {
@@ -173,6 +176,7 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
+            lock_ObtainMutex(&tsp->mx);
         }
     }