From 5f1ba3ea6ff32b9840e182d78921d0f34061946d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Mon, 14 Apr 2014 17:56:23 -0400
Subject: [PATCH] sipvoiplink: lock mutex in getCalls()

---
 daemon/src/sip/sipvoiplink.cpp | 24 +++++++++++++-----------
 daemon/src/sip/sipvoiplink.h   |  2 +-
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index cfe76ff816..34b3521090 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -732,17 +732,6 @@ bool SIPVoIPLink::getEvent()
     return handlingEvents_;
 }
 
-std::vector<Call*>
-SIPVoIPLink::getCalls(const std::string &account_id) const
-{
-    std::vector<Call*> calls;
-    for (const auto & item : sipCallMap_) {
-        if (item.second->getAccountId() == account_id)
-            calls.push_back(item.second);
-    }
-    return calls;
-}
-
 void
 SIPVoIPLink::sendRegister(Account& a)
 {
@@ -1327,6 +1316,19 @@ SIPVoIPLink::getCallIDs()
     return v;
 }
 
+std::vector<Call*>
+SIPVoIPLink::getCalls(const std::string &account_id) const
+{
+    std::lock_guard<std::mutex> lock(sipCallMapMutex_);
+
+    std::vector<Call*> calls;
+    for (const auto & item : sipCallMap_) {
+        if (item.second->getAccountId() == account_id)
+            calls.push_back(item.second);
+    }
+    return calls;
+}
+
 void SIPVoIPLink::addSipCall(SIPCall* call)
 {
     if (!call)
diff --git a/daemon/src/sip/sipvoiplink.h b/daemon/src/sip/sipvoiplink.h
index 895df50473..fc0858f599 100644
--- a/daemon/src/sip/sipvoiplink.h
+++ b/daemon/src/sip/sipvoiplink.h
@@ -313,7 +313,7 @@ class SIPVoIPLink : public VoIPLink {
          */
         AccountMap sipAccountMap_;
 
-        std::mutex sipCallMapMutex_;
+        mutable std::mutex sipCallMapMutex_;
         SipCallMap sipCallMap_;
 
         /**
-- 
GitLab