Module: sems Branch: master Commit: 4b771a7a984a88a77ab96e0af41f6aa1c1e5cefb URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=4b771a7a984a88a77ab96e0af41f6aa1c1e5cefb
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Tue Apr 17 18:43:38 2012 +0200 b/f: separate thread for processing SIP Subscriptions (avoid deadlock on EventDispatcher) the AmSipSubscriptionContainter thread is only started once a subscription is used. --- core/AmSipSubscriptionContainer.cpp | 9 ++++++--- core/AmSipSubscriptionContainer.h | 9 ++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/core/AmSipSubscriptionContainer.cpp b/core/AmSipSubscriptionContainer.cpp index cd60aac..008b603 100644 --- a/core/AmSipSubscriptionContainer.cpp +++ b/core/AmSipSubscriptionContainer.cpp @@ -44,6 +44,9 @@ _AmSipSubscriptionContainer::~_AmSipSubscriptionContainer() { void _AmSipSubscriptionContainer::initialize() { if (!initialized) { // AmEventDispatcher::instance()->addEventQueue(SUBSCRIPTION_CONTAINER_EVQ_ID, this); + initialized = true; + DBG("Starting SIP Subscription client thread ([%p])\n", this); + start(); } } @@ -102,9 +105,9 @@ void _AmSipSubscriptionContainer::removeSubscription(const string& sub_handle) { subscriptions_mut.unlock(); } -// AmEventQueueInterface -void _AmSipSubscriptionContainer::postEvent(AmEvent* event) { - auto_ptr<AmEvent> l_event(event); +// AmEventProcessingThread +void _AmSipSubscriptionContainer::onEvent(AmEvent* event) { + // auto_ptr<AmEvent> l_event(event); AmSipRequestEvent* sip_req_ev = dynamic_cast<AmSipRequestEvent*>(event); if (sip_req_ev) { diff --git a/core/AmSipSubscriptionContainer.h b/core/AmSipSubscriptionContainer.h index 09dbe7d..556733b 100644 --- a/core/AmSipSubscriptionContainer.h +++ b/core/AmSipSubscriptionContainer.h @@ -30,11 +30,10 @@ #define _AmSipSubscriptionContainer_h_ #include "AmSipSubscription.h" -#include "AmEventQueue.h" -#include "AmThread.h" +#include "AmEventProcessingThread.h" class _AmSipSubscriptionContainer -: public AmEventQueueInterface +: public AmEventProcessingThread { AmSipSubscriptionMap subscriptions; AmMutex subscriptions_mut; @@ -50,8 +49,8 @@ class _AmSipSubscriptionContainer bool refreshSubscription(const string& sub_handle, unsigned int wanted_expires=0); void removeSubscription(const string& sub_handle); - // AmEventQueueInterface - void postEvent(AmEvent* event); + // AmEventProcessingThread + void onEvent(AmEvent* event); }; typedef singleton<_AmSipSubscriptionContainer> AmSipSubscriptionContainer; _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
