afs-server-multi-rx-clesnup-20041202
[openafs.git] / src / afs / afs_server.c
index c8ca36b..91e3146 100644 (file)
@@ -499,6 +499,7 @@ afs_CheckServers(int adown, struct cell *acellp)
     afs_int32 i, j;
     afs_int32 code;
     afs_int32 start, end = 0, delta;
+    afs_int32 m_error;
     osi_timeval_t tv;
     struct unixuser *tu;
     char tbuffer[CVBS];
@@ -597,40 +598,47 @@ afs_CheckServers(int adown, struct cell *acellp)
     start = osi_Time();         /* time the gettimeofday call */
     AFS_GUNLOCK(); 
     multi_Rx(rxconns,nconns)
-       {
-           tv.tv_sec = tv.tv_usec = 0;
-           multi_RXAFS_GetTime(&tv.tv_sec, &tv.tv_usec);
-           tc = conns[multi_i];
-           sa = tc->srvr;
-           if (conntimer[multi_i] == 0)
-               rx_SetConnDeadTime(tc->id, AFS_RXDEADTIME);
-           end = osi_Time();
-           if ((start == end) && !multi_error)
-               deltas[multi_i] = end - tv.tv_sec;
-           if (( multi_error >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) && (tc->srvr == sa)) {
-               /* server back up */
-               print_internet_address("afs: file server ", sa, " is back up", 2);
-               
-                ObtainWriteLock(&afs_xserver, 244);
-                ObtainWriteLock(&afs_xsrvAddr, 245);        
-                afs_MarkServerUpOrDown(sa, 0);
-                ReleaseWriteLock(&afs_xsrvAddr);
-                ReleaseWriteLock(&afs_xserver);
-               
-               if (afs_waitForeverCount) {
-                   afs_osi_Wakeup(&afs_waitForever);
-               }
-           } else {
-               if (multi_error < 0) {
-                               /* server crashed */
-                   afs_ServerDown(sa);
-                   ForceNewConnections(sa);  /* multi homed clients */
-               }
-           }
-           
-       } multi_End;
+      {
+       tv.tv_sec = tv.tv_usec = 0;
+       multi_RXAFS_GetTime(&tv.tv_sec, &tv.tv_usec);
+       tc = conns[multi_i];
+       sa = tc->srvr;
+       if (conntimer[multi_i] == 0)
+         rx_SetConnDeadTime(tc->id, AFS_RXDEADTIME);
+       end = osi_Time();
+       m_error=multi_error;
+       if ((start == end) && !multi_error)
+         deltas[multi_i] = end - tv.tv_sec;
+       
+      } multi_End;
     AFS_GLOCK(); 
+    
+    for(i=0;i<nconns;i++){
+      tc = conns[i];
+      sa = tc->srvr;
+      
+      if (( m_error >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) && (tc->srvr == sa)) {
+       /* server back up */
+       print_internet_address("afs: file server ", sa, " is back up", 2);
+       
+       ObtainWriteLock(&afs_xserver, 244);
+       ObtainWriteLock(&afs_xsrvAddr, 245);        
+       afs_MarkServerUpOrDown(sa, 0);
+       ReleaseWriteLock(&afs_xsrvAddr);
+       ReleaseWriteLock(&afs_xserver);
+       
+       if (afs_waitForeverCount) {
+         afs_osi_Wakeup(&afs_waitForever);
+       }
+      } else {
+       if (m_error < 0) {
+         /* server crashed */
+         afs_ServerDown(sa);
+         ForceNewConnections(sa);  /* multi homed clients */
+       }
+      }
+    }
+
     /*
      * If we're supposed to set the time, and the call worked
      * quickly (same second response) and this is the host we