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

Reply via email to