[ros-diffs] [fireball] 34092: Jeffrey Morlan <mrnobo1024 at 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.

fireball at svn.reactos.org fireball at svn.reactos.org
Thu Jun 26 10:26:48 CEST 2008


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 at 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=34092&r1=34091&r2=34092&view=diff
==============================================================================
--- 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;
         }
     }
 



More information about the Ros-diffs mailing list