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

Reply via email to