hi Ross, see below for the explanation from Frederik of dereferencing a deleted RTPInterface
--------- When I take the following steps to add debug output: * #define DEBUG_SEND in RTPInterface.cpp * print RTPInterface's address in its destructor * print which RTPInterface address is used in SocketDescriptor's destructor 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. * Medium::close | MediaLookupTable::remove | MediaSession::~MediaSession | MediaSubsession::~MediaSubsession | MediaSubsession::deInitiate | Medium::close | MediaLookupTable::remove | RTCPInstance::~RTCPInstance sendRTPorRTCPPacketOverTCP: 56 bytes over channel 1 (socket 103) sendRTPorRTCPPacketOverTCP: completed sendRTPorRTCPPacketOverTCP: 16 bytes over channel 1 (socket 103) sendRTPorRTCPPacketOverTCP: completed SocketDescriptor(socket 103)::deregisterRTPInterface(channel 1) Debug: ~RTPInterface 0x65a3eb38 SocketDescriptor(socket 103)::deregisterRTPInterface(channel 0) Debug: ~RTPInterface 0x60f218dc sendRTPorRTCPPacketOverTCP: 40 bytes over channel 1 (socket 98) SocketDescriptor(socket 98)::deregisterRTPInterface(channel 255) SocketDescriptor(socket 98)::deregisterRTPInterface fDeleteMyselfNext = True (channel 255) sendRTPorRTCPPacketOverTCP: failed! (errno 9) Debug: ~RTPInterface *0x65a41ab8* SocketDescriptor(socket 98)::deregisterRTPInterface(channel 0) Debug: ~RTPInterface 0x60f08a1c Debug: Use rtpInterface *0x65a41ab8* streamChannelId 1 @ ~SocketDescriptor ... rtpInterface = (RTPInterface*)(iter->next(key))
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel