windows-hold-server-mutex-for-vol-list-20071223
authorJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 24 Dec 2007 05:29:15 +0000 (05:29 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 24 Dec 2007 05:29:15 +0000 (05:29 +0000)
LICENSE MIT

When walking or modifying the cm_server_vols_t associated with a given
cm_server_t the mutex must be held.  Otherwise, races can occur.

src/WINNT/afsd/cm_callback.c
src/WINNT/afsd/cm_server.c

index 210009a..f9148c8 100644 (file)
@@ -1901,8 +1901,6 @@ cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown)
                 tsp->downTime = osi_Time();
             }
             cm_ForceNewConnections(tsp);
-            lock_ReleaseMutex(&tsp->mx);
-
             /* Now update the volume status */
             for (tsrvp = tsp->vols; tsrvp; tsrvp = tsrvp->nextp) {
                 for (i=0; i<NUM_SERVER_VOLS; i++) {
@@ -1920,6 +1918,7 @@ cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown)
                     }
                 }
             }
+            lock_ReleaseMutex(&tsp->mx);
         }
     }
 }
index b8d029a..493016a 100644 (file)
@@ -129,7 +129,6 @@ 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) {
@@ -144,7 +143,6 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
-            lock_ObtainMutex(&tsp->mx);
         }
     } else {
        /* mark server as down */
@@ -166,7 +164,6 @@ 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) {
@@ -181,7 +178,6 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
-            lock_ObtainMutex(&tsp->mx);
         }
     }