diff options
Diffstat (limited to 'src/windows/identity/util/sync.c')
-rw-r--r-- | src/windows/identity/util/sync.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/windows/identity/util/sync.c b/src/windows/identity/util/sync.c index b50d484daf..d686a8e80a 100644 --- a/src/windows/identity/util/sync.c +++ b/src/windows/identity/util/sync.c @@ -1,5 +1,5 @@ /*
- * Copyright (c) 2004 Massachusetts Institute of Technology
+ * Copyright (c) 2005 Massachusetts Institute of Technology
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -52,6 +52,8 @@ KHMEXP void KHMAPI DeleteRwLock(PRWLOCK pLock) DeleteCriticalSection(&(pLock->cs));
CloseHandle(pLock->readwx);
CloseHandle(pLock->writewx);
+ pLock->readwx = NULL;
+ pLock->writewx = NULL;
}
KHMEXP void KHMAPI LockObtainRead(PRWLOCK pLock)
@@ -91,6 +93,7 @@ KHMEXP void KHMAPI LockObtainWrite(PRWLOCK pLock) pLock->writer == GetCurrentThreadId()) {
pLock->locks++;
LeaveCriticalSection(&(pLock->cs));
+ assert(FALSE);
return;
}
LeaveCriticalSection(&(pLock->cs));
@@ -103,6 +106,7 @@ KHMEXP void KHMAPI LockObtainWrite(PRWLOCK pLock) }
pLock->status = LOCK_WRITING;
pLock->locks++;
+ pLock->writer = GetCurrentThreadId();
ResetEvent(pLock->readwx);
LeaveCriticalSection(&(pLock->cs));
}
@@ -114,6 +118,7 @@ KHMEXP void KHMAPI LockReleaseWrite(PRWLOCK pLock) pLock->locks--;
if(!pLock->locks) {
pLock->status = LOCK_OPEN;
+ pLock->writer = 0;
SetEvent(pLock->readwx);
SetEvent(pLock->writewx);
}
|