Jeffrey Morlan <mrnobo1024@yahoo.com>

- Fix a major problem in pushlock implementation: if there are 2 or more
threads waiting for a lock, only one of them ever gets woken. ExfWakePushLock
is missing a break in its loop so it removes all the WaitBlocks instead of just
the last one.
- This fixes all "weird" hangs happening, including FF1.5 installer hang, VMWare Video Driver Installer hang, taskmgr tabs hang, and other similar problems.
See issue #3141 for more details.

svn path=/trunk/; revision=34092
This commit is contained in:
Aleksey Bragin 2008-06-26 08:26:48 +00:00
parent 2b63244bc8
commit ed1f927907

View file

@ -155,6 +155,9 @@ ExfWakePushLock(PEX_PUSH_LOCK PushLock,
/* Remove waking bit from pushlock */
InterlockedAnd((PLONG)PushLock, ~EX_PUSH_LOCK_WAKING);
/* Leave the loop */
break;
}
}