Module: sems
Branch: 1.4
Commit: a03278d09f744008d115ff9379be7139263466c3
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=a03278d09f744008d115ff9379be7139263466c3

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Fri Nov  4 17:14:54 2011 +0100

b/f: in bye() don't do send_200_ack while iterating over uac_trans

send_200_ack erases the transaction, which may lead to fault when
iterating is continued

---

 core/AmSipDialog.cpp |   31 +++++++++++++++++++------------
 1 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp
index d31357a..935a1f5 100644
--- a/core/AmSipDialog.cpp
+++ b/core/AmSipDialog.cpp
@@ -792,19 +792,26 @@ int AmSipDialog::bye(const string& hdrs, int flags)
     switch(status){
 
     case Disconnecting:
-    case Connected:
-        for (TransMap::iterator it=uac_trans.begin();
-            it != uac_trans.end(); it++) {
-         if (it->second.method == "INVITE"){
-           // finish any UAC transaction before sending BYE
-           send_200_ack(it->second);
-         }
+    case Connected: {
+      // collect INVITE UAC transactions
+      vector<AmSipTransaction> ack_trans;
+      for (TransMap::iterator it=uac_trans.begin(); it != uac_trans.end(); 
it++) {
+       if (it->second.method == "INVITE"){
+         ack_trans.push_back(it->second);
        }
-       if (AmConfig::WaitForByeTransaction)
-         status = Disconnecting;
-       else
-         status = Disconnected;
-       return sendRequest("BYE", "", "", hdrs, flags);
+      }
+      // finish any UAC transaction before sending BYE
+      for (vector<AmSipTransaction>::iterator it=
+            ack_trans.begin(); it != ack_trans.end(); it++) {
+       send_200_ack(*it);
+      }
+
+      if (AmConfig::WaitForByeTransaction)
+       status = Disconnecting;
+      else
+       status = Disconnected;
+      return sendRequest("BYE", "", "", hdrs, flags);
+    }
 
     case Pending:
        status = Disconnecting;

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to