Dear all,
I continue working in some task synchronization I referred to in a 
previous mail and I need some clarification to go on because I'm getting 
either dead-locks or crashes when trying to map a distributed object.
The point is the following, I have a distributed object to help in the 
creation of application wide objects that I need to coordinate 
asynchronous tasks. That manager is created during config initialization 
and is registered and mapped similarly to the InitData from eqPly, with 
the difference that I don't unmap the object until nodeExit. The manager 
registers several commands which are used by the application node to 
signal client nodes to map/unmap additional objects. Then, I can 
register new objects in the application thread and afterwards tell the 
ID to the other nodes to map the object.
The problem I have is when mapping the remote objects. If I register the 
manager's command to the receiver thread within the local node (passing 
0 as the queue to registerCommand) the call to session->mapObject inside 
the command callback from the client blocks in the sync part. I guess 
this makes sense since the receiver thread probably needs to handle some 
packets to finalize the mapping and this code leads to a trivial dead-lock.
But, if I register the command to the command thread as (in 
Barrier::attachToSession) the assert in Session::mapObjectNB line 341: 
EQASSERT( !_localNode->inCommandThread( )); fails.
Obviously the assert is right but from what I've seen in the barrier 
code, the command callback Window::_cmdBarrier ends up calling mapObject 
to map the barrier object in slave nodes and I guess that works fine. 
It's also true that the window commands are dispatched by the pipe thread.
So I guess that I'll have to create my own dispatcher thread to handle 
these commands. What I'd like to know is whether my deduction is right 
and if there is any other alternative to having to launch a dedicated 
thread. If there is no other way, how do I create the thread and the 
queue where commands must be registered?

Thanks and regards,
Juan

_______________________________________________
eq-dev mailing list
[email protected]
http://www.equalizergraphics.com/cgi-bin/mailman/listinfo/eq-dev
http://www.equalizergraphics.com

Reply via email to