Author: rco
Date: 2008-04-24 11:07:02 +0200 (Thu, 24 Apr 2008)
New Revision: 916

Modified:
   trunk/core/plug-in/sipctrl/trans_layer.cpp
Log:
- fixes a race condition where the reply could have been received before UAC 
request transaction has been inserted. (Thx to Juha!!!).


Modified: trunk/core/plug-in/sipctrl/trans_layer.cpp
===================================================================
--- trunk/core/plug-in/sipctrl/trans_layer.cpp  2008-04-23 19:37:20 UTC (rev 
915)
+++ trunk/core/plug-in/sipctrl/trans_layer.cpp  2008-04-24 09:07:02 UTC (rev 
916)
@@ -531,15 +531,17 @@
        ntohs(((sockaddr_in*)&p_msg->remote_ip)->sin_port),
        p_msg->len,p_msg->buf);
 
+    trans_bucket* bucket = get_trans_bucket(p_msg->callid->value,
+                                           get_cseq(p_msg)->num_str);
+    bucket->lock();
+
     int send_err = transport->send(&p_msg->remote_ip,p_msg->buf,p_msg->len);
     if(send_err < 0){
        ERROR("Error from transport layer\n");
        delete p_msg;
     }
     else {
-       trans_bucket* bucket = get_trans_bucket(p_msg->callid->value,
-                                               get_cseq(p_msg)->num_str);
-       bucket->lock();
+
        sip_trans* t = bucket->add_trans(p_msg,TT_UAC);
        if(p_msg->u.request->method == sip_request::INVITE){
            
@@ -560,9 +562,9 @@
        string t_id = int2hex(bucket->get_id()).substr(5,string::npos) 
            + ":" + long2hex((unsigned long)t);
        memcpy(tid,t_id.c_str(),12);
-       
-       bucket->unlock();
     }
+
+    bucket->unlock();
     
     return send_err;
 }

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

Reply via email to