From 1fed39fe1488abd654a5488b5e6ad59b4b973331 Mon Sep 17 00:00:00 2001
From: nanang <nanang@localhost>
Date: Tue, 8 Jan 2019 09:07:47 +0000
Subject: [PATCH 1/5] Fixed #2172: Avoid double reference counter decrements in
 timer in the scenario of race condition between pj_timer_heap_cancel() and
 pj_timer_heap_poll().

---
 pjlib/src/pj/timer.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/pjlib/src/pj/timer.c b/pjlib/src/pj/timer.c
index 90a95e37b..7bae084ef 100644
--- a/pjlib/src/pj/timer.c
+++ b/pjlib/src/pj/timer.c
@@ -580,13 +580,16 @@ static int cancel_timer(pj_timer_heap_t *ht,
 
     lock_timer_heap(ht);
     count = cancel(ht, entry, flags | F_DONT_CALL);
-    if (flags & F_SET_ID) {
-	entry->id = id_val;
-    }
-    if (entry->_grp_lock) {
-	pj_grp_lock_t *grp_lock = entry->_grp_lock;
-	entry->_grp_lock = NULL;
-	pj_grp_lock_dec_ref(grp_lock);
+    if (count > 0) {
+	/* Timer entry found & cancelled */
+	if (flags & F_SET_ID) {
+	    entry->id = id_val;
+	}
+	if (entry->_grp_lock) {
+	    pj_grp_lock_t *grp_lock = entry->_grp_lock;
+	    entry->_grp_lock = NULL;
+	    pj_grp_lock_dec_ref(grp_lock);
+	}
     }
     unlock_timer_heap(ht);
 
-- 
2.20.1

