summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2014-02-18 12:34:25 +0000
committerBenny Prijono <bennylp@teluu.com>2014-02-18 12:34:25 +0000
commitf9317b810877c3cab6bda8ea07dc94eb3ecb7c20 (patch)
tree924c812ba829690a93a5e7e48e1005cd8bffd4d9
parent705a5aad8174993ca69db59c0fa9eb2098b60b21 (diff)
Fixed #1737: Deadlock between ioqueue key mutex and SIP dialog when adding video media with ICE and STUN enabled
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4749 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index ce7722c9..ab4c4bde 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -829,11 +829,24 @@ static pj_status_t create_ice_media_transport(
/* Wait until transport is initialized, or time out */
if (!async) {
pj_bool_t has_pjsua_lock = PJSUA_LOCK_IS_LOCKED();
+ pjsip_dialog *dlg = call_med->call->inv ?
+ call_med->call->inv->dlg : NULL;
if (has_pjsua_lock)
PJSUA_UNLOCK();
+ if (dlg) {
+ /* Don't lock otherwise deadlock:
+ * https://trac.pjsip.org/repos/ticket/1737
+ */
+ ++dlg->sess_count;
+ pjsip_dlg_dec_lock(dlg);
+ }
while (call_med->tp_ready == PJ_EPENDING) {
pjsua_handle_events(100);
}
+ if (dlg) {
+ pjsip_dlg_inc_lock(dlg);
+ --dlg->sess_count;
+ }
if (has_pjsua_lock)
PJSUA_LOCK();
}