summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-simple
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-08-10 21:44:26 +0000
committerBenny Prijono <bennylp@teluu.com>2006-08-10 21:44:26 +0000
commitd09368727007e87aaf50271297bfc1ce0d1a47a7 (patch)
tree5b719f1504b5b72f589e62d0c0a22ef3de04be04 /pjsip/src/pjsip-simple
parentcaad58f9b7daf65180a0614ba00d9d6145d7a007 (diff)
Attempt to fix the race condition in dialog locking.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@671 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-simple')
-rw-r--r--pjsip/src/pjsip-simple/evsub.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/pjsip/src/pjsip-simple/evsub.c b/pjsip/src/pjsip-simple/evsub.c
index e5b4f526..a6f6b2ca 100644
--- a/pjsip/src/pjsip-simple/evsub.c
+++ b/pjsip/src/pjsip-simple/evsub.c
@@ -668,6 +668,9 @@ static pj_status_t evsub_create( pjsip_dialog *dlg,
return PJSIP_SIMPLE_ENOPKG;
+ /* Must lock dialog before using pool etc. */
+ pjsip_dlg_inc_lock(dlg);
+
/* Init attributes: */
sub = pj_pool_zalloc(dlg->pool, sizeof(struct pjsip_evsub));
@@ -714,8 +717,10 @@ static pj_status_t evsub_create( pjsip_dialog *dlg,
/* Register as dialog usage: */
status = pjsip_dlg_add_usage(dlg, &mod_evsub.mod, dlgsub_head);
- if (status != PJ_SUCCESS)
+ if (status != PJ_SUCCESS) {
+ pjsip_dlg_dec_lock(dlg);
return status;
+ }
PJ_LOG(5,(sub->obj_name, "%s subscription created, using dialog %s",
@@ -723,6 +728,7 @@ static pj_status_t evsub_create( pjsip_dialog *dlg,
dlg->obj_name));
*p_evsub = sub;
+ pjsip_dlg_dec_lock(dlg);
return PJ_SUCCESS;
}