Hello Michael, On 09/05/2011 08:07 AM, Michael Raab wrote: > Client side: > I have a RenderChannel fc for each connected server. The RenderChannel knows > if it is connected and what its channel number is. > If someone decides to disconnect one RenderChannel, the appropriate fc is > marked as disconneted (simple boolean field) and pushed into a local list of > the client. > After next sync is finished all RenderChannels in this list will be > disconnected from the group connection of the client by calling > GroupConnection::disconnect(Channel c). > > Server side: > Each server knows about the RenderChannel fc that represents the server on > the client side. After each sync the server checks whether the RenderChannel > was marked as disconnected. Once noticed I call ClusterServer::stop() and > return from the render loop.
hmm, this means there is sort of a race which side gets to close the connection, depending on whether the server first notices that it should exit or if the client completes the sync first and processes the list of servers to disconnect. It would probably be more reliable (if nothing else because it can be tested better) to always have one side to close the connection first. > Problems: > 1.) The cluster server stucks inside the stop() call while trying to delete > the RemoteAspect. Seems that there arises some infinte loop in the destructor. that only seems possible if some FC never reaches a ref count of zero and/or does not deregister itself from the FC factory. > 2.) After disconnecting the server, the client renders correct for some > seconds, then the following exception is thrown: > > FATAL: Writer Proc crashed SocketLib: select() 10022 WSAEINVAL > > The error seems to arise in SocketSelection::select() and seems to be catched > in GroupMCastConnection::sendQueueThread() > > After that point rendering stops on client side, seems to be another deadlock > situation. > > Any ideas? I'm kind of confused by the network stuff :-( sorry, only the obvious suggestion to try to find out what is causing select() to fail - my guess would be that the server closed the connection first and now the client attempts to do a select on a disconnected socket or something along those line. Cheers, Carsten ------------------------------------------------------------------------------ Special Offer -- Download ArcSight Logger for FREE! Finally, a world-class log management solution at an even better price-free! And you'll get a free "Love Thy Logs" t-shirt when you download Logger. Secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsisghtdev2dev _______________________________________________ Opensg-users mailing list Opensg-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensg-users