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