mirror of
https://git.openafs.org/openafs.git
synced 2025-02-01 05:57:43 +00:00
STABLE14-windows-release-locks-at-shutdown-20051108
remember to release all of the locks we obtained from the file server at shutdown. (cherry picked from commit 685ba16a0b9db8cf5df2e875ff9a6e5b72d6539c)
This commit is contained in:
parent
9398a1a9c6
commit
9dbe65fcc6
@ -1351,6 +1351,11 @@ afsd_Main(DWORD argc, LPTSTR *argv)
|
||||
|
||||
RpcShutdown();
|
||||
|
||||
cm_ReleaseAllLocks();
|
||||
|
||||
rx_Finalize();
|
||||
afsi_log("rx finalization complete");
|
||||
|
||||
cm_ShutdownMappedMemory();
|
||||
|
||||
#ifdef REGISTER_POWER_NOTIFICATIONS
|
||||
|
@ -3589,10 +3589,10 @@ static int cm_KeyEquals(cm_key_t k1, cm_key_t k2, int flags);
|
||||
|
||||
/* Called with scp->mx held */
|
||||
long cm_UnlockByKey(cm_scache_t * scp,
|
||||
cm_key_t key,
|
||||
int flags,
|
||||
cm_user_t * userp,
|
||||
cm_req_t * reqp)
|
||||
cm_key_t key,
|
||||
int flags,
|
||||
cm_user_t * userp,
|
||||
cm_req_t * reqp)
|
||||
{
|
||||
long code = 0;
|
||||
AFSFid tfid;
|
||||
@ -4520,3 +4520,38 @@ static int cm_KeyEquals(cm_key_t k1, cm_key_t k2, int flags)
|
||||
return (k1 == k2);
|
||||
}
|
||||
}
|
||||
|
||||
void cm_ReleaseAllLocks(void)
|
||||
{
|
||||
cm_scache_t *scp;
|
||||
cm_req_t req;
|
||||
cm_user_t *userp;
|
||||
cm_key_t key;
|
||||
cm_file_lock_t *fileLock;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < cm_data.hashTableSize; i++)
|
||||
{
|
||||
for ( scp = cm_data.hashTablep[i]; scp; scp = scp->nextp ) {
|
||||
while (scp->fileLocksH != NULL) {
|
||||
lock_ObtainMutex(&scp->mx);
|
||||
lock_ObtainWrite(&cm_scacheLock);
|
||||
if (!scp->fileLocksH) {
|
||||
lock_ReleaseWrite(&cm_scacheLock);
|
||||
lock_ReleaseMutex(&scp->mx);
|
||||
break;
|
||||
}
|
||||
fileLock = (cm_file_lock_t *)((char *) scp->fileLocksH - offsetof(cm_file_lock_t, fileq));
|
||||
userp = fileLock->userp;
|
||||
cm_HoldUser(userp);
|
||||
key = fileLock->key;
|
||||
cm_HoldSCacheNoLock(scp);
|
||||
lock_ReleaseWrite(&cm_scacheLock);
|
||||
cm_UnlockByKey(scp, key, 0, userp, &req);
|
||||
cm_ReleaseSCache(scp);
|
||||
cm_ReleaseUser(userp);
|
||||
lock_ReleaseMutex(&scp->mx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -172,7 +172,9 @@ extern long cm_LockCheckWrite(cm_scache_t *scp,
|
||||
LARGE_INTEGER LLength,
|
||||
cm_key_t key);
|
||||
|
||||
extern void cm_CheckLocks();
|
||||
extern void cm_CheckLocks(void);
|
||||
|
||||
extern void cm_ReleaseAllLocks(void);
|
||||
|
||||
extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user