<div dir="ltr"><div class="gmail_quote"><div dir="ltr">Hi Ross,<div>  I use <span style="font-family:arial,sans-serif;font-size:13px">liveMedia library 2014.01.24 to do streaming via RTSP over TCP. When client is still connecting to server and I delete </span>RTSPServer,</div>
<div>my system will crash. The following is the call stack I traced:<br clear="all"><div><br></div><div>== RTSPServer.cpp</div><div>RTSPServer::~RTSPServer (line 309) -> RTSPClientSession::~RTSPClientSession -> RTSPClientSession::reclaimStreamStates</div>

<div>== OnDemandServerMediaSubsession.cpp</div><div>-> OnDemandServerMediaSubsession::deleteStream -> StreamState::endPlaying</div><div>== RTPInterface.cpp</div><div>-> RTPInterface::removeStreamSocket (fRTPSink or fRTCPInstance called) -> deregisterSocket -> SocketDescriptor::deregisterRTPInterface</div>

<div>->SocketDescriptor::~SocketDescriptor</div><div><br></div><div>two things happend:</div><div>1. RTPInterface::removeStreamSocket is called and it seems lead to recursive and double delete SocketDescriptor.<br>2. Callback fServerRequestAlternativeByteHandler is called. Now It is RTSPClientConnection::handleAlternativeRequestByte (line 1933) and</div>

<div>   call RTSPClientConnection::handleAlternativeRequestByte1 of one RTSPClientConnection instance. But all RTSPClientConnection objects</div><div>have  been deleted before deleting RTSPClientSession in RTSPServer::~RTSPServer.</div>
<div><br></div><div>Here is my solution:</div><div>1. Just comment the code that handling remove stream socket.</div><div>2. Switch the handling order of RTSPClientConnection and RTSPClientSession. It means to delete RTSPClientSession first because</div>
<div>    RTSPClientSession is based on RTSPClientConnection. I think this is better.</div><div><br></div><div>Don't describe very well, hope you can understand :) .</div><div>Many thanks.</div><span class=""><font color="#888888"><div>
<br></div></font></span></div></div></div>-- <br>走遍眾世誰為痴<br>笑看百態追楚狂<br>我心自有極樂國<br>風雲星月皆文章
</div>