X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4d1c1c3c70f516e858ab076013641d41436cfe4e..4fcd60c72f6b90f5063f7000ff5a80a9004055a3:/src/msw/thread.cpp diff --git a/src/msw/thread.cpp b/src/msw/thread.cpp index 66efdf36ac..f76f9a4c7b 100644 --- a/src/msw/thread.cpp +++ b/src/msw/thread.cpp @@ -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(); } @@ -322,8 +327,14 @@ void wxCondition::Broadcast() wxCriticalSection::wxCriticalSection() { - wxASSERT_MSG( sizeof(CRITICAL_SECTION) <= sizeof(m_buffer), +#ifdef __WXDEBUG__ + // Done this way to stop warnings during compilation about statement + // always being false + int csSize = sizeof(CRITICAL_SECTION); + int bSize = sizeof(m_buffer); + wxASSERT_MSG( csSize <= bSize, _T("must increase buffer size in wx/thread.h") ); +#endif ::InitializeCriticalSection((CRITICAL_SECTION *)m_buffer); }