diff --git a/src/WINNT/afsd/cm_daemon.c b/src/WINNT/afsd/cm_daemon.c index 08918369b3..ac210e1981 100644 --- a/src/WINNT/afsd/cm_daemon.c +++ b/src/WINNT/afsd/cm_daemon.c @@ -59,7 +59,8 @@ void cm_IpAddrDaemon(long parm) if (Result == NO_ERROR && daemon_ShutdownFlag == 0) { osi_Log0(afsd_logp, "cm_IpAddrDaemon CheckDownServers"); Sleep(2500); - cm_CheckServers(CM_FLAG_CHECKDOWNSERVERS, NULL); + cm_ForceNewConnectionsAllServers(); + cm_CheckServers(CM_FLAG_CHECKUPSERVERS | CM_FLAG_CHECKDOWNSERVERS, NULL); smb_CheckVCs(); } } diff --git a/src/WINNT/afsd/cm_server.c b/src/WINNT/afsd/cm_server.c index e94e3480d7..3d29d271cb 100644 --- a/src/WINNT/afsd/cm_server.c +++ b/src/WINNT/afsd/cm_server.c @@ -29,6 +29,20 @@ osi_rwlock_t cm_serverLock; cm_server_t *cm_allServersp; +void +cm_ForceNewConnectionsAllServers(void) +{ + cm_server_t *tsp; + + lock_ObtainRead(&cm_serverLock); + for (tsp = cm_allServersp; tsp; tsp = tsp->allNextp) { + cm_GetServerNoLock(tsp); + cm_ForceNewConnections(tsp); + cm_PutServerNoLock(tsp); + } + lock_ReleaseRead(&cm_serverLock); +} + void cm_PingServer(cm_server_t *tsp) { diff --git a/src/WINNT/afsd/cm_server.h b/src/WINNT/afsd/cm_server.h index 0212f0f794..9182a2aad4 100644 --- a/src/WINNT/afsd/cm_server.h +++ b/src/WINNT/afsd/cm_server.h @@ -103,4 +103,6 @@ extern void cm_FreeServer(cm_server_t* server); extern void cm_FreeServerList(cm_serverRef_t** list); +extern void cm_ForceNewConnectionsAllServers(void); + #endif /* __CM_SERVER_H_ENV__ */