summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2015-09-11 09:40:11 +0000
committerNanang Izzuddin <nanang@teluu.com>2015-09-11 09:40:11 +0000
commit82979e3f4c5b4b327e8ddf43f5206ce26cbc6b08 (patch)
tree8c53e4401322becd819412b12adbf4308205b210 /pjsip
parent7ebeb75488bb29faab2197c260689b5aca48d758 (diff)
Re #1885: Fixed race condition in evsub scenario 1 (Subscription timeout vs subscription refresh).
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5177 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip-simple/evsub.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-simple/evsub.c b/pjsip/src/pjsip-simple/evsub.c
index 650901d8..0588d98e 100644
--- a/pjsip/src/pjsip-simple/evsub.c
+++ b/pjsip/src/pjsip-simple/evsub.c
@@ -628,6 +628,14 @@ static void on_timer( pj_timer_heap_t *timer_heap,
pjsip_dlg_inc_lock(sub->dlg);
+ /* If this timer entry has just been rescheduled or cancelled
+ * while waiting for dialog mutex, just return (see #1885 scenario 1).
+ */
+ if (pj_timer_entry_running(entry) || entry->id == TIMER_TYPE_NONE) {
+ pjsip_dlg_dec_lock(sub->dlg);
+ return;
+ }
+
timer_id = entry->id;
entry->id = TIMER_TYPE_NONE;