From 382ff1dffd549c615101b4bef4e4d3ebd034978f Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sun, 21 Aug 2005 01:51:35 +0000 Subject: [PATCH] STABLE14-windows-afscreds-deadlock-20050820 found a deadlock in the expiration check if a MessageBox dialog is being displayed (cherry picked from commit 84e761d850c4cf5f76dd844e6e6f738a35f88102) --- src/WINNT/client_creds/window.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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; -- 2.39.5