<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Hello,<BR>
<BR>
Thanks for the fix. And I will take your advise and use a different email account when I post a new issue. For the moment, I am running into another senario of a runaway RTP-over-TCP session, and it is preventing me from testing your last fix. <BR> <BR>
The problem is in the <FONT size=2>SocketDescriptor::tcpReadHandler1() function between the lines 362-368 in </FONT>RTPInterface.cpp. What happens is that the handler could not complete to frame the TEARDOWN command before the client shuts the socket. It results in a socket read error, and there is no provision to teardown the client session. For whatever reason, this senario keeps happening to me nowadays although I am using the same client program [VLC 0.9.6] as before, and I cannot verify your last fix.<BR>
<BR>
Regards,<BR>
John Tam<BR>
<BR>
> Date: Tue, 31 Aug 2010 11:11:37 -0700<BR>> To: live-devel@ns.live555.com<BR>> From: finlayson@live555.com<BR>> Subject: Re: [Live-devel] Server runaway streams for shared session for RTP-over-TCP client<BR>> <BR>> >I am using the RTSP server functionality of the LiveMedia library, <BR>> >and I might have resolved a client session management issue. The <BR>> >senario is when a ServerMediaSubsession is shared <BR>> >[reuseFirstSource=True] and clients choose RTP-over-TCP for <BR>> >streaming mode, only the last requested RTP-over-TCP <BR>> >RTSPClientSession can be torn down. All of the objects under the <BR>> >ServerMediaSession will be runaways. The MediaSink keeps playing, <BR>> >and the RTPInstance writes with socket error. The stderr shows <BR>> >socket write attempts after all of the RTSP clients are closed.<BR>> ><BR>> >I am trying to limit the scope of the impacted code, and there seems <BR>> >to be two area in the RTPInstance.cpp that are contributing to the <BR>> >problem. #1, The <BR>> >RTPInterface::setServerRequestAlternativeByteHandler() function is <BR>> >overwriting the handler and clientData of an already assigned <BR>> >SocketDescriptor object. It makes all existing socket descriptor of <BR>> >the server media subsession to map to the latest RTSPClientSession <BR>> >instance. #2, When RTCPInstance::addStreamSocket() function adds a <BR>> >new stream channel, the RTPInterface::stopNetworkReading() function <BR>> >calls deregisterSocket() and wipes out the existing SocketDescriptor <BR>> >to RTSPClientSession mapping. Therefore, only the last newly added <BR>> >SocketDescriptor has a valid fServerRequestAlternativeByteHandler to <BR>> >notify of RTSP TEARDOWN command.<BR>> <BR>> At first I didn't pay much attention to this email, both because you <BR>> were (at first) working with an old version of the code, but also <BR>> because you were using a "@hotmail.com" email address, which serious <BR>> professionals do not use. (If you want to be taken seriously on this <BR>> mailing list, then you should not use "@hotmail", "@yahoo", <BR>> "@gmail"-type addresses :-)<BR>> <BR>> But your analysis of the problem was exactly right. I have now <BR>> installed a new version of the code (2010.08.31) that should, I hope, <BR>> fix this problem.<BR>> -- <BR>> <BR>> Ross Finlayson<BR>> Live Networks, Inc.<BR>> http://www.live555.com/<BR>> _______________________________________________<BR>> live-devel mailing list<BR>> live-devel@lists.live555.com<BR>> http://lists.live555.com/mailman/listinfo/live-devel<BR>                                            </body>
</html>