summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-08-11 12:42:50 +0000
committerBenny Prijono <bennylp@teluu.com>2006-08-11 12:42:50 +0000
commit925c039b2866b794ca279630f3de50326052c829 (patch)
tree9ee8bbc240a4376434c4ec5ed75d6a4e84c02c02 /pjsip
parentf79611d255626123e863cc5653b5285c01e69036 (diff)
Fixed bugs in previous deadlock workaround
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@673 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip/sip_dialog.c15
-rw-r--r--pjsip/src/pjsip/sip_ua_layer.c14
2 files changed, 21 insertions, 8 deletions
diff --git a/pjsip/src/pjsip/sip_dialog.c b/pjsip/src/pjsip/sip_dialog.c
index 3149be4c..fd70c767 100644
--- a/pjsip/src/pjsip/sip_dialog.c
+++ b/pjsip/src/pjsip/sip_dialog.c
@@ -689,12 +689,18 @@ PJ_DEF(pj_status_t) pjsip_dlg_inc_session( pjsip_dialog *dlg,
*/
PJ_DEF(void) pjsip_dlg_inc_lock(pjsip_dialog *dlg)
{
+ PJ_LOG(6,(dlg->obj_name, "Entering pjsip_dlg_inc_lock(), sess_count=%d",
+ dlg->sess_count));
+
pjsip_ua_lock_dlg_table();
pj_mutex_lock(dlg->mutex_);
dlg->sess_count++;
- pjsip_ua_unlock_dlg_table();
+ //pjsip_ua_unlock_dlg_table();
+
+ PJ_LOG(6,(dlg->obj_name, "Leaving pjsip_dlg_inc_lock(), sess_count=%d",
+ dlg->sess_count));
}
@@ -704,7 +710,10 @@ PJ_DEF(void) pjsip_dlg_inc_lock(pjsip_dialog *dlg)
*/
PJ_DEF(void) pjsip_dlg_dec_lock(pjsip_dialog *dlg)
{
- pjsip_ua_lock_dlg_table();
+ PJ_LOG(6,(dlg->obj_name, "Entering pjsip_dlg_dec_lock(), sess_count=%d",
+ dlg->sess_count));
+
+ //pjsip_ua_lock_dlg_table();
pj_assert(dlg->sess_count > 0);
--dlg->sess_count;
@@ -718,6 +727,8 @@ PJ_DEF(void) pjsip_dlg_dec_lock(pjsip_dialog *dlg)
}
pjsip_ua_unlock_dlg_table();
+
+ PJ_LOG(6,(THIS_FILE, "Leaving pjsip_dlg_dec_lock() (dlg=%p)", dlg));
}
diff --git a/pjsip/src/pjsip/sip_ua_layer.c b/pjsip/src/pjsip/sip_ua_layer.c
index 5e63e71c..d8552ce0 100644
--- a/pjsip/src/pjsip/sip_ua_layer.c
+++ b/pjsip/src/pjsip/sip_ua_layer.c
@@ -586,17 +586,18 @@ static pj_bool_t mod_ua_on_rx_request(pjsip_rx_data *rdata)
rdata->endpt_info.mod_data[mod_ua.mod.id] = dlg;
/* Lock the dialog */
+ PJ_LOG(6,(dlg->obj_name, "UA layer acquiring dialog lock for request"));
pjsip_dlg_inc_lock(dlg);
- /* Done processing in the UA */
- pj_mutex_unlock(mod_ua.mutex);
-
/* Pass to dialog. */
pjsip_dlg_on_rx_request(dlg, rdata);
/* Unlock the dialog. This may destroy the dialog */
pjsip_dlg_dec_lock(dlg);
+ /* Done processing in the UA */
+ pj_mutex_unlock(mod_ua.mutex);
+
/* Report as handled. */
return PJ_TRUE;
}
@@ -782,17 +783,18 @@ static pj_bool_t mod_ua_on_rx_response(pjsip_rx_data *rdata)
rdata->endpt_info.mod_data[mod_ua.mod.id] = dlg;
/* Acquire lock to the dialog. */
+ PJ_LOG(6,(dlg->obj_name, "UA layer acquiring dialog lock for response"));
pjsip_dlg_inc_lock(dlg);
- /* Unlock dialog hash table. */
- pj_mutex_unlock(mod_ua.mutex);
-
/* Pass the response to the dialog. */
pjsip_dlg_on_rx_response(dlg, rdata);
/* Unlock the dialog. This may destroy the dialog. */
pjsip_dlg_dec_lock(dlg);
+ /* Unlock dialog hash table. */
+ pj_mutex_unlock(mod_ua.mutex);
+
/* Done. */
return PJ_TRUE;
}