windows-noprobe-20080131
[openafs.git] / src / WINNT / afsd / cm_server.c
index b7d0acc..ec3a70b 100644 (file)
@@ -171,8 +171,10 @@ cm_PingServer(cm_server_t *tsp)
                     if (tsrvp->ids[i] != 0) {
                         cm_InitReq(&req);
 
+                        lock_ReleaseMutex(&tsp->mx);
                         code = cm_GetVolumeByID(tsp->cellp, tsrvp->ids[i], cm_rootUserp,
                                                 &req, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp);
+                        lock_ObtainMutex(&tsp->mx);
                         if (code == 0) {
                             cm_UpdateVolumeStatus(volp, tsrvp->ids[i]);
                             cm_PutVolume(volp);
@@ -372,7 +374,6 @@ cm_server_t *cm_NewServer(struct sockaddr_in *socketp, int type, cm_cell_t *cell
         tsp->refCount = 1;
         lock_InitializeMutex(&tsp->mx, "cm_server_t mutex");
         tsp->addr = *socketp;
-        tsp->flags = CM_SERVERFLAG_DOWN;       /* assume down; ping will mark up if available */
 
         cm_SetServerPrefs(tsp); 
 
@@ -381,8 +382,10 @@ cm_server_t *cm_NewServer(struct sockaddr_in *socketp, int type, cm_cell_t *cell
         cm_allServersp = tsp;
         lock_ReleaseWrite(&cm_serverLock);     /* release server lock */
 
-        if ( !(flags & CM_FLAG_NOPROBE) )
+        if ( !(flags & CM_FLAG_NOPROBE) ) {
+            tsp->flags = CM_SERVERFLAG_DOWN;   /* assume down; ping will mark up if available */
             cm_PingServer(tsp);                        /* Obtain Capabilities and check up/down state */
+        }
     }
     return tsp;
 }