From ea31864ed16797a535ad5ad7588cfc67a0e3cf80 Mon Sep 17 00:00:00 2001
From: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
Date: Tue, 7 Aug 2012 15:44:13 -0400
Subject: [PATCH] * #14444: sip: don't use call object after deleting it

---
 daemon/src/sip/sipvoiplink.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index 113f84e060..361625bbba 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -1339,7 +1339,7 @@ SIPVoIPLink::SIPCallServerFailure(SIPCall *call)
 void
 SIPVoIPLink::SIPCallClosed(SIPCall *call)
 {
-    std::string id(call->getCallId());
+    const std::string id(call->getCallId());
 
     stopRtpIfCurrent(id, *call);
 
@@ -1500,8 +1500,11 @@ void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status)
 
     if (status != PJ_SUCCESS) {
         WARN("Could not negotiate offer");
-        SIPVoIPLink::instance()->hangup(call->getCallId());
-        Manager::instance().callFailure(call->getCallId());
+        const std::string callID(call->getCallId());
+        SIPVoIPLink::instance()->hangup(callID);
+        // call is now a dangling pointer after calling hangup
+        call = 0;
+        Manager::instance().callFailure(callID);
         return;
     }
 
-- 
GitLab