diff options
author | Benny Prijono <bennylp@teluu.com> | 2014-02-18 12:34:25 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2014-02-18 12:34:25 +0000 |
commit | f9317b810877c3cab6bda8ea07dc94eb3ecb7c20 (patch) | |
tree | 924c812ba829690a93a5e7e48e1005cd8bffd4d9 | |
parent | 705a5aad8174993ca69db59c0fa9eb2098b60b21 (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.c | 13 |
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(); } |