From 925c039b2866b794ca279630f3de50326052c829 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Fri, 11 Aug 2006 12:42:50 +0000 Subject: Fixed bugs in previous deadlock workaround git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@673 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip/sip_dialog.c | 15 +++++++++++++-- pjsip/src/pjsip/sip_ua_layer.c | 14 ++++++++------ 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; } -- cgit v1.2.3