summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_pres.c
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2016-02-05 04:29:17 +0000
committerNanang Izzuddin <nanang@teluu.com>2016-02-05 04:29:17 +0000
commit3985dd57937870f3d47a4ddd68b477a42ffddec1 (patch)
tree7cfd8a02592a91bbae1f72e1792bac0954a0e1db /pjsip/src/pjsua-lib/pjsua_pres.c
parent09977f8551064c5972ea5d23605bfd4adb886189 (diff)
Fixed #1902:
- Crash when endpoint has multiple worker threads and SIP TCP transport is disconnected during incoming call handling. - Deprecated pjsip_dlg_create_uas(), replaced by pjsip_dlg_create_uas_and_inc_lock(). - Serialized transaction state notifications (of 'terminated' and 'destroyed') in case of transport error. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5241 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_pres.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_pres.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c
index 6b35070f..bc22143d 100644
--- a/pjsip/src/pjsua-lib/pjsua_pres.c
+++ b/pjsip/src/pjsua-lib/pjsua_pres.c
@@ -855,8 +855,8 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata)
}
/* Create UAS dialog: */
- status = pjsip_dlg_create_uas(pjsip_ua_instance(), rdata,
- &contact, &dlg);
+ status = pjsip_dlg_create_uas_and_inc_lock(pjsip_ua_instance(), rdata,
+ &contact, &dlg);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE,
"Unable to create UAS dialog for subscription",
@@ -921,11 +921,15 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata)
tdata);
}
+ pjsip_dlg_dec_lock(dlg);
PJSUA_UNLOCK();
pj_log_pop_indent();
return PJ_TRUE;
}
+ /* Subscription has been created, decrement & release dlg lock */
+ pjsip_dlg_dec_lock(dlg);
+
/* If account is locked to specific transport, then lock dialog
* to this transport too.
*/
@@ -1035,7 +1039,6 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata)
}
/* Done: */
-
PJSUA_UNLOCK();
pj_log_pop_indent();
return PJ_TRUE;