diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 806ac3ea7a..1401b78d5e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,12 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-02-19 12:49 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/vm/thread.c + ! fixed the typo in order of sending signals in _hb_thread_cond_signal() + _hb_thread_cond_broadcast() for OS2. By mistake it was LIFO instead of + FIFO. + 2009-02-18 17:05 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * harbour/contrib/gtwvg/wvgscrlb.prg * Disabled structure support for time being as diff --git a/harbour/source/vm/thread.c b/harbour/source/vm/thread.c index eb2b76f97a..a500884bb7 100644 --- a/harbour/source/vm/thread.c +++ b/harbour/source/vm/thread.c @@ -199,6 +199,9 @@ static void _hb_thread_wait_add( HB_COND_T * cond, PHB_WAIT_LIST pWaiting ) { ULONG ulPostCount = 0; + DosResetEventSem( pWaiting->cond, &ulPostCount ); + pWaiting->signaled = FALSE; + if( cond->waiters == NULL ) { cond->waiters = pWaiting->next = pWaiting->prev = pWaiting; @@ -209,8 +212,6 @@ static void _hb_thread_wait_add( HB_COND_T * cond, PHB_WAIT_LIST pWaiting ) pWaiting->prev = cond->waiters->prev; cond->waiters->prev = pWaiting->prev->next = pWaiting; } - pWaiting->signaled = FALSE; - DosResetEventSem( pWaiting->cond, &ulPostCount ); } static void _hb_thread_wait_del( HB_COND_T * cond, PHB_WAIT_LIST pWaiting ) @@ -240,7 +241,7 @@ static BOOL _hb_thread_cond_signal( HB_COND_T * cond ) /* signal only single thread */ break; } - pWaiting = pWaiting->prev; + pWaiting = pWaiting->next; } while( pWaiting != cond->waiters ); } @@ -260,7 +261,7 @@ static BOOL _hb_thread_cond_broadcast( HB_COND_T * cond ) DosPostEventSem( pWaiting->cond ); pWaiting->signaled = TRUE; } - pWaiting = pWaiting->prev; + pWaiting = pWaiting->next; } while( pWaiting != cond->waiters ); }