diff options
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-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(); } |