Hi Robert,

I saw that you put the new thread code on svn. I have experimented a little 
with it and it seems to produce deadlocks on application shutdown for us. In 
OperationThread::cancel you have replaced a while loop with a join. The problem 
is that the previous code was periodically calling _currentOperation->release() 
which the new code does not do.
I think I have narrowed the problem down, there are two scenarios that can 
produce deadlocks:

1)
OperationThread::cancel can call _currentOperation->release() when the 
operation thread is at line 396 to 399 (so it didn't set _currentOperation 
yet). This way the operation thread will be blocking on the operation it just 
got from the queue, which is not the operation that got it's release method 
called by OperationThread::cancel.

2)
If the current operation is a barrier then the release method only releases 
threads that are waiting, it does not invalidate the barrier. So if the 
operation thread is not yet in the barrier and you call release it will still 
block when it arrives at the barrier.

Cheers,
Pjotr

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=61519#61519





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to