Thanks David, changes now merged and submitted to svn/trunk and OSG-2.8 branch.
On Thu, Jul 2, 2009 at 2:53 PM, David Fries<[email protected]> wrote: > Here is a fix for a deadlock seen under Windows using OpenThreads > Barrier operations. The error is with atomic operations in the > win32 condition implementation. The attached sample program will > reliably trigger with as few as three threads and a dual core system, > though sometimes it will take 65,000 iterations. > > 2.8.1 was the base for these changes > > Win32ConditionPrivateData.h > Win32ConditionPrivateData::wait does two operations to decrement > waiters_ then read, when InterlockedDecrement decrements and returns > the value in one operation. The two operations allows another thread > to also decrement with both getting 0 for an answer. > > Win32ConditionPrivateData::broadcast is using waiters_ directly > instead of using the w value read earlier, if it was safe to use > waiters_ directly there would be no need for InterlockedGet or w. > > overview of deadlock in barrier with three threads > one thread in broadcast, 2 threads in wait, > release semaphore 2, waits on waiters_done_ > both threads wake, decrement waiters_, get 0 for w, > <logic error here> > one calls set waiters_done_, > broadcast thread comes out of waiters_done_, > other thread calls waiters_done_, (which leaves waiters_done_ in the > signaled state) > <sets the trap> > broadcast thread returns releases mutex, other threads get > mutex and also return, > next barrier, first two threads enter wait, one goes to broadcast, release > semaphore 2, skips waiters_done_ as it had been released last time > returns, processes, enters the barrier for the next barrier operation > and waits, > three threads are now in wait, two have the previous barrier phase, > one the current phase, there's one count left in the semaphore which a > thread gets, returns, enters the barrier as a waiter, sleeps, and the > deadlock is completed > > -- > David Fries <[email protected]> > http://fries.net/~david/ (PGP encryption key available) > > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
