Clear the ringing slave ID when the slave is disconnected on timer too.

git-svn-id: http://yate.null.ro/svn/yate/trunk@4792 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
paulc 2012-01-04 15:52:58 +00:00
parent 927863685b
commit f75aceca2a
1 changed files with 13 additions and 6 deletions

View File

@ -49,6 +49,7 @@ public:
{ return m_slaves; }
bool msgToSlaves(const Message& msg, const String& match);
protected:
bool clearRinging(const String& id);
void clear(bool softly);
String* getNextDest();
bool forkSlave(String* dest);
@ -406,12 +407,7 @@ void ForkMaster::checkTimer(const Time& tmr)
void ForkMaster::lostSlave(ForkSlave* slave, const char* reason)
{
Lock lock(CallEndpoint::commonMutex());
bool ringing = m_ringing == slave->id();
if (ringing) {
m_fake = false;
m_ringing.clear();
clearEndpoint();
}
bool ringing = clearRinging(slave->id());
m_slaves.remove(slave,false);
if (m_answered)
return;
@ -575,6 +571,16 @@ bool ForkMaster::msgToSlaves(const Message& msg, const String& match)
return ok;
}
bool ForkMaster::clearRinging(const String& id)
{
if (m_ringing != id)
return false;
m_fake = false;
m_ringing.clear();
clearEndpoint();
return true;
}
void ForkMaster::clear(bool softly)
{
RefPointer<ForkSlave> slave;
@ -583,6 +589,7 @@ void ForkMaster::clear(bool softly)
while (slave = static_cast<ForkSlave*>(iter.get())) {
if (softly && (slave->type() == ForkSlave::Persistent))
continue;
clearRinging(slave->id());
m_slaves.remove(slave,false);
slave->clearMaster();
CallEndpoint::commonMutex().unlock();