Author: fireball
Date: Thu Jun 26 03:26:48 2008
New Revision: 34092
URL: http://svn.reactos.org/svn/reactos?rev=34092&view=rev
Log:
Jeffrey Morlan <mrnobo1024(a)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.
Modified:
trunk/reactos/ntoskrnl/ex/pushlock.c
Modified: trunk/reactos/ntoskrnl/ex/pushlock.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/pushlock.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ex/pushlock.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/pushlock.c [iso-8859-1] Thu Jun 26 03:26:48 2008
@@ -155,6 +155,9 @@
/* Remove waking bit from pushlock */
InterlockedAnd((PLONG)PushLock, ~EX_PUSH_LOCK_WAKING);
+
+ /* Leave the loop */
+ break;
}
}