<div dir="ltr"><div><div>hi Ross,<br><br></div>see below for the explanation from Frederik of dereferencing a deleted RTPInterface<br><br>---------<br></div><div><div><div><div><div><div><div><div><br><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div>When I take the following steps to add debug output:</div><div>* #define DEBUG_SEND in RTPInterface.cpp</div><div>* print RTPInterface's address in its destructor</div><div>* print which RTPInterface address is used in SocketDescriptor's destructor</div><div><br></div><div>the following output shows that a socket write error (9) causes the fDeleteMyselfNext flag to be set. When the taskScheduler task is eventually deleting the SocketDescriptor, the RTPInterface used was already delete by Medium::close*, which was called as a Teardown callback function.</div><div><br></div><div>* Medium::close | MediaLookupTable::remove | MediaSession::~MediaSession | MediaSubsession::~MediaSubsess<wbr>ion | MediaSubsession::deInitiate | Medium::close | MediaLookupTable::remove | RTCPInstance::~RTCPInstance</div><div><br></div><div><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br></div><div>sendRTPorRTCPPacketOverTCP: 56 bytes over channel 1 (socket 103)<br>sendRTPorRTCPPacketOverTCP: completed<br>sendRTPorRTCPPacketOverTCP: 16 bytes over channel 1 (socket 103)<br>sendRTPorRTCPPacketOverTCP: completed<br>SocketDescriptor(socket 103)::deregisterRTPInterface(c<wbr>hannel 1)<br>Debug: ~RTPInterface  0x65a3eb38<br>SocketDescriptor(socket 103)::deregisterRTPInterface(c<wbr>hannel 0)<br>Debug: ~RTPInterface  0x60f218dc<br>sendRTPorRTCPPacketOverTCP: 40 bytes over channel 1 (socket 98)<br>SocketDescriptor(socket 98)::deregisterRTPInterface(ch<wbr>annel 255)<br>SocketDescriptor(socket 98)::deregisterRTPInterface fDeleteMyselfNext = True (channel 255)<br>sendRTPorRTCPPacketOverTCP: failed! (errno 9)<br>Debug: ~RTPInterface  <u>0x65a41ab8</u><br>SocketDescriptor(socket 98)::deregisterRTPInterface(ch<wbr>annel 0)<br>Debug: ~RTPInterface  0x60f08a1c<br>Debug: Use rtpInterface <u>0x65a41ab8</u>  streamChannelId  1 @ ~SocketDescriptor ... rtpInterface = (RTPInterface*)(iter->next(key<wbr>))</div></div>
</div><br></div>
</div><br></div></div></div></div></div></div></div></div></div>