From ae50192d2312d4ca31afeec5f2c58d5d9f42065c Mon Sep 17 00:00:00 2001 From: Horst Birthelmer Date: Tue, 7 Dec 2004 06:12:40 +0000 Subject: [PATCH] STABLE14-afs-server-multi-rx-clesnup-20041202 clean up multirx code 's use of lock (cherry picked from commit bdd73ef446e4fb1788f414549f39a63ac2419470) --- src/afs/afs_server.c | 74 ++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/afs/afs_server.c b/src/afs/afs_server.c index c8ca36b8d..91e3146be 100644 --- a/src/afs/afs_server.c +++ b/src/afs/afs_server.c @@ -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;isrvr; + + 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 -- 2.39.5