diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-08-10 21:44:26 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-08-10 21:44:26 +0000 |
commit | d09368727007e87aaf50271297bfc1ce0d1a47a7 (patch) | |
tree | 5b719f1504b5b72f589e62d0c0a22ef3de04be04 /pjsip/src/pjsip-simple | |
parent | caad58f9b7daf65180a0614ba00d9d6145d7a007 (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.c | 8 |
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; } |