summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_media.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-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();
}