From f9317b810877c3cab6bda8ea07dc94eb3ecb7c20 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 18 Feb 2014 12:34:25 +0000 Subject: 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 --- pjsip/src/pjsua-lib/pjsua_media.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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(); } -- cgit v1.2.3