Revision: 34746
http://sourceforge.net/p/opalvoip/code/34746
Author: rjongbloed
Date: 2016-03-31 11:24:15 +0000 (Thu, 31 Mar 2016)
Log Message:
-----------
Possible fix for "RTP thread failed to terminate" assertion. Make socket timeout slightly longer than media timeout to avoid a race condition with m_mediaTimer expiring.
Modified Paths:
--------------
opal/trunk/src/opal/mediasession.cxx
Modified: opal/trunk/src/opal/mediasession.cxx
===================================================================
--- opal/trunk/src/opal/mediasession.cxx 2016-03-31 11:12:01 UTC (rev 34745)
+++ opal/trunk/src/opal/mediasession.cxx 2016-03-31 11:24:15 UTC (rev 34746)
@@ -693,9 +693,12 @@
// Do timeout case
case PChannel::Timeout:
- PTRACE(1, m_owner, *m_owner << m_subchannel << " timed out (" << m_channel->GetReadTimeout() << "s)");
- if (!m_owner->m_mediaTimer.IsRunning())
+ if (m_owner->m_mediaTimer.IsRunning())
+ PTRACE(2, m_owner, *m_owner << m_subchannel << " timed out (" << m_channel->GetReadTimeout() << "s), other subchannels running");
+ else {
+ PTRACE(1, m_owner, *m_owner << m_subchannel << " timed out (" << m_owner->m_mediaTimeout << "s), closing");
Close();
+ }
break;
default:
@@ -797,7 +800,7 @@
void OpalMediaTransport::InternalStop()
{
- PTRACE(4, *this << "stopping");
+ PTRACE(4, *this << "stopping " << m_subchannels.size() << "subchannels.");
LockReadOnly();
for (vector<Transport>::iterator it = m_subchannels.begin(); it != m_subchannels.end(); ++it)
it->Close();
@@ -1139,7 +1142,9 @@
PUDPSocket & socket = *GetSubChannelAsSocket((SubChannels)subchannel);
PTRACE_CONTEXT_ID_TO(socket);
- socket.SetReadTimeout(m_mediaTimeout);
+ /* Make socket timeout slightly longer (200ms) than media timeout to avoid
+ a race condition with m_mediaTimer expiring. */
+ socket.SetReadTimeout(m_mediaTimeout+200);
// Increase internal buffer size on media UDP sockets
SetMinBufferSize(socket, SO_RCVBUF, session.GetMediaType() == OpalMediaType::Audio() ? 0x4000 : 0x100000);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|