[Opalvoip-svn] SF.net SVN: opalvoip:[34737] opal/trunk
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2016-03-29 09:23:35
|
Revision: 34737 http://sourceforge.net/p/opalvoip/code/34737 Author: rjongbloed Date: 2016-03-29 09:23:32 +0000 (Tue, 29 Mar 2016) Log Message: ----------- Changed gatekeeper start delay algorithm so can be shut down. Modified Paths: -------------- opal/trunk/include/h323/h323ep.h opal/trunk/src/h323/gkclient.cxx Modified: opal/trunk/include/h323/h323ep.h =================================================================== --- opal/trunk/include/h323/h323ep.h 2016-03-29 07:53:10 UTC (rev 34736) +++ opal/trunk/include/h323/h323ep.h 2016-03-29 09:23:32 UTC (rev 34737) @@ -1369,7 +1369,7 @@ void SetLocalUserName(const PString & name) { return SetDefaultLocalPartyName(name); } const PString & GetLocalUserName() const { return GetDefaultLocalPartyName(); } - void InternalDelayGatekeeperDiscovery(); + PTimeInterval InternalGetGatekeeperStartDelay(); protected: bool InternalStartGatekeeper(const H323TransportAddress & remoteAddress, const PString & localAddress); Modified: opal/trunk/src/h323/gkclient.cxx =================================================================== --- opal/trunk/src/h323/gkclient.cxx 2016-03-29 07:53:10 UTC (rev 34736) +++ opal/trunk/src/h323/gkclient.cxx 2016-03-29 09:23:32 UTC (rev 34737) @@ -264,25 +264,38 @@ } -void H323EndPoint::InternalDelayGatekeeperDiscovery() +PTimeInterval H323EndPoint::InternalGetGatekeeperStartDelay() { if (m_gatekeeperStartDelay == 0) - return; + return m_gatekeeperStartDelay; + PTimeInterval delay; + + m_delayGatekeeperMutex.Wait(); + if (m_lastGatekeeperDiscovery.IsValid()) { PTimeInterval elapsed = m_lastGatekeeperDiscovery.GetElapsed(); if (elapsed < m_gatekeeperStartDelay) - PThread::Sleep(m_gatekeeperStartDelay - elapsed); + delay = m_gatekeeperStartDelay - elapsed; } m_lastGatekeeperDiscovery.SetCurrentTime(); + + m_delayGatekeeperMutex.Signal(); + + return delay; } bool H323Gatekeeper::DiscoverGatekeeper() { discoveryComplete = false; - endpoint.InternalDelayGatekeeperDiscovery(); + PSimpleTimer delay(endpoint.InternalGetGatekeeperStartDelay()); + while (delay.IsRunning()) { + if (!m_monitorRunning) + return false; + m_monitorTickle.Wait(delay.GetRemaining()); + } for (;;) { H323RasPDU pdu; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |