]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed bug with Broadcast() not waking up all threads (Pieter van der Meulen)
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 21 Nov 2000 17:22:03 +0000 (17:22 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 21 Nov 2000 17:22:03 +0000 (17:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8765 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/thread.cpp

index 66efdf36ac33b01ec87a1a4c6c68611cebeef763..a743d287b0cb27022a5b22c57627ab87546461f9 100644 (file)
@@ -257,10 +257,15 @@ public:
 
     void Broadcast()
     {
+        // we need to save the original value as m_nWaiters is goign to be
+        // decreased by the signalled thread resulting in the loop being
+        // executed less times than needed
+        LONG nWaiters = m_nWaiters;
+
         // this works because all these threads are already waiting and so each
         // SetEvent() inside Signal() is really a PulseEvent() because the
         // event state is immediately returned to non-signaled
-        for ( LONG n = 0; n < m_nWaiters; n++ )
+        for ( LONG n = 0; n < nWaiters; n++ )
         {
             Signal();
         }