]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-hold-server-mutex-for-vol-list-20071223
authorJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 24 Dec 2007 05:30:37 +0000 (05:30 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 24 Dec 2007 05:30:37 +0000 (05:30 +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.

(cherry picked from commit b0bae13aec9acb944d5d6a64c11df857ffc40eb3)

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

index 0e8cfb3cfb9bd40e817e3c05622d4f012ce227d0..e738d1b5b8642370a6d3fccc0f6d59870182ab5e 100644 (file)
@@ -1905,8 +1905,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++) {
@@ -1924,6 +1922,7 @@ cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown)
                     }
                 }
             }
+            lock_ReleaseMutex(&tsp->mx);
         }
     }
 }
index 67d5c75e070ea74863452c3722034b15da380f8d..dfc5741aed17465a1c3530833c5020349bb3eb24 100644 (file)
@@ -133,7 +133,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) {
@@ -148,7 +147,6 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
-            lock_ObtainMutex(&tsp->mx);
         }
     } else {
        /* mark server as down */
@@ -170,7 +168,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) {
@@ -185,7 +182,6 @@ cm_PingServer(cm_server_t *tsp)
                     }
                 }
             }
-            lock_ObtainMutex(&tsp->mx);
         }
     }