Module: sems Branch: master Commit: 2b858d839c2f9edd39c17efde72b034bcd5b7a80 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=2b858d839c2f9edd39c17efde72b034bcd5b7a80
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Thu Feb 10 17:32:28 2011 +0100 b/f small race condition, some more logging added --- core/AmSessionProcessor.cpp | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-) diff --git a/core/AmSessionProcessor.cpp b/core/AmSessionProcessor.cpp index 361d6bc..74f6bd0 100644 --- a/core/AmSessionProcessor.cpp +++ b/core/AmSessionProcessor.cpp @@ -94,6 +94,8 @@ void AmSessionProcessorThread::run() { runcond.wait_for(); + DBG("running processing loop\n"); + process_sessions_mut.lock(); runcond.set(false); // get the list of session s that need processing @@ -102,6 +104,7 @@ void AmSessionProcessorThread::run() { process_sessions.clear(); process_sessions_mut.unlock(); + // process control events (AmSessionProcessorThreadAddEvent) events.processEvents(); // startup all new sessions @@ -112,8 +115,13 @@ void AmSessionProcessorThread::run() { startup_sessions.begin(); it != startup_sessions.end(); it++) { - if ((*it)->startup()) + DBG("starting up [%p/ltag %s]\n", + *it, (*it)->getLocalTag().c_str()); + if ((*it)->startup()) { sessions.push_back(*it); // startup successful + // make sure this session is being processed for startup events + pending_process_sessions.insert(*it); + } } startup_sessions.clear(); @@ -121,8 +129,11 @@ void AmSessionProcessorThread::run() { std::vector<AmSession*> fin_sessions; + DBG("processing events for <=%zd sessions\n", + pending_process_sessions.size()); + std::list<AmSession*>::iterator it=sessions.begin(); - while (it != sessions.end()) { + while (it != sessions.end()) { if ((pending_process_sessions.find(*it)!= pending_process_sessions.end()) && (!(*it)->processingCycle())) { @@ -139,6 +150,8 @@ void AmSessionProcessorThread::run() { DBG("finalizing %zd sessions\n", fin_sessions.size()); for (std::vector<AmSession*>::iterator it=fin_sessions.begin(); it != fin_sessions.end(); it++) { + DBG("finalizing session [%p/%s/%s]\n", + *it, (*it)->getCallID().c_str(), (*it)->getLocalTag().c_str()); (*it)->finalize(); } } @@ -160,7 +173,8 @@ void AmSessionProcessorThread::process(AmEvent* e) { return; } - DBG("scheduling session [%p] for startup\n", add_ev->s); + DBG("scheduling session [%p/%s] for startup\n", + add_ev->s, add_ev->s->getCallID().c_str()); startup_sessions.push_back(add_ev->s); } _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
