From: Jeffrey Altman Date: Sun, 21 Aug 2005 01:51:35 +0000 (+0000) Subject: STABLE14-windows-afscreds-deadlock-20050820 X-Git-Tag: openafs-stable-1_4_0-rc1~1 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=382ff1dffd549c615101b4bef4e4d3ebd034978f;p=packages%2Fo%2Fopenafs.git STABLE14-windows-afscreds-deadlock-20050820 found a deadlock in the expiration check if a MessageBox dialog is being displayed (cherry picked from commit 84e761d850c4cf5f76dd844e6e6f738a35f88102) --- diff --git a/src/WINNT/client_creds/window.cpp b/src/WINNT/client_creds/window.cpp index f2173d2d7..a1afafa88 100644 --- a/src/WINNT/client_creds/window.cpp +++ b/src/WINNT/client_creds/window.cpp @@ -679,9 +679,18 @@ void Main_EnableRemindTimer (BOOL fEnable) size_t Main_FindExpiredCreds (void) { size_t retval = (size_t) -1; + static bool expirationCheck = false; lock_ObtainMutex(&g.expirationCheckLock); + if (expirationCheck) { + lock_ReleaseMutex(&g.expirationCheckLock); + return -1; + } + expirationCheck = true; + lock_ReleaseMutex(&g.expirationCheckLock); + if ( KFW_is_available() ) KFW_AFS_renew_expiring_tokens(); + lock_ObtainMutex(&g.credsLock); for (size_t iCreds = 0; iCreds < g.cCreds; ++iCreds) { @@ -716,6 +725,9 @@ size_t Main_FindExpiredCreds (void) } lock_ReleaseMutex(&g.credsLock); + + lock_ObtainMutex(&g.expirationCheckLock); + expirationCheck = false; lock_ReleaseMutex(&g.expirationCheckLock); return retval;