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