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@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; } }