<p>Richard Mudgett has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/10487">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bundled pjproject: Remove timer cleanup usage patch.<br><br>This patch is not in the upstream pjproject and does unsafe things with<br>the timer->_timer_id and timer->_grp_lock values in pj_timer_entry_reset()<br>outside of the timer heap lock.  pj_timer_entry_reset() is also called for<br>timers that are not about to be rescheduled in a few places.<br><br>Change-Id: I4fe0b4bc648f7be5903cf4531b94fc87275713c1<br>---<br>D third-party/pjproject/patches/0010-timer-Clean-up-usage-of-timer-heap.patch<br>1 file changed, 0 insertions(+), 434 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/87/10487/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/third-party/pjproject/patches/0010-timer-Clean-up-usage-of-timer-heap.patch b/third-party/pjproject/patches/0010-timer-Clean-up-usage-of-timer-heap.patch</span><br><span>deleted file mode 100644</span><br><span>index adde49b..0000000</span><br><span>--- a/third-party/pjproject/patches/0010-timer-Clean-up-usage-of-timer-heap.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,434 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From f7d91ca2a3c562066f95db066381a8b956ded98f Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: George Joseph <gjoseph@digium.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Tue, 2 Jan 2018 06:36:46 -0700</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 5/5] timer: Clean up usage of timer heap</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Added a new pj_timer_entry_reset function that resets a timer_entry</span><br><span style="color: hsl(0, 100%, 40%);">-for re-use.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Changed direct settings of timer_entry fields to use</span><br><span style="color: hsl(0, 100%, 40%);">-pj_timer_entry_init and pj_timer_entry_reset.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixed issues where timers were being rescheduled incorrectly.</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/include/pj/timer.h             | 14 ++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/ssl_sock_ossl.c         |  8 +++++---</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/timer.c                 | 12 ++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjnath/ice_session.c      |  9 ++++++++-</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjnath/nat_detect.c       |  2 ++</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjnath/stun_sock.c        |  2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjnath/stun_transaction.c | 10 +++++-----</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjnath/turn_session.c     |  3 +++</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjnath/turn_sock.c        |  1 +</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjturn-srv/allocation.c   |  4 ++--</span><br><span style="color: hsl(0, 100%, 40%);">- pjnath/src/pjturn-srv/listener_tcp.c |  2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/pjsip-simple/evsub.c       |  6 +++---</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/pjsip/sip_endpoint.c       |  4 +++-</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/pjsip/sip_transaction.c    |  9 +++------</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/pjsip/sip_transport.c      |  3 +--</span><br><span style="color: hsl(0, 100%, 40%);">- 15 files changed, 64 insertions(+), 25 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/include/pj/timer.h b/pjlib/include/pj/timer.h</span><br><span style="color: hsl(0, 100%, 40%);">-index df6155a..90fc8ac 100644</span><br><span>---- a/pjlib/include/pj/timer.h</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/include/pj/timer.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -213,6 +213,20 @@ PJ_DECL(pj_timer_entry*) pj_timer_entry_init( pj_timer_entry *entry,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               pj_timer_heap_callback *cb );</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- /**</span><br><span style="color: hsl(0, 100%, 40%);">-+ * Reset a timer entry. Application should call this function before reusing</span><br><span style="color: hsl(0, 100%, 40%);">-+ * the timer entry.</span><br><span style="color: hsl(0, 100%, 40%);">-+ *</span><br><span style="color: hsl(0, 100%, 40%);">-+ * @param entry     The timer entry to be initialized.</span><br><span style="color: hsl(0, 100%, 40%);">-+ * @param id        Arbitrary ID assigned by the user/owner of this entry.</span><br><span style="color: hsl(0, 100%, 40%);">-+ *                  Applications can use this ID to distinguish multiple</span><br><span style="color: hsl(0, 100%, 40%);">-+ *                  timer entries that share the same callback and user_data.</span><br><span style="color: hsl(0, 100%, 40%);">-+ *</span><br><span style="color: hsl(0, 100%, 40%);">-+ * @return          The timer entry itself.</span><br><span style="color: hsl(0, 100%, 40%);">-+ */</span><br><span style="color: hsl(0, 100%, 40%);">-+PJ_DECL(pj_timer_entry*) pj_timer_entry_reset( pj_timer_entry *entry,</span><br><span style="color: hsl(0, 100%, 40%);">-+                                             int id);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+/**</span><br><span style="color: hsl(0, 100%, 40%);">-  * Queries whether a timer entry is currently running.</span><br><span style="color: hsl(0, 100%, 40%);">-  *</span><br><span style="color: hsl(0, 100%, 40%);">-  * @param entry     The timer entry to query.</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/ssl_sock_ossl.c b/pjlib/src/pj/ssl_sock_ossl.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 738fb8b..fb3b359 100644</span><br><span>---- a/pjlib/src/pj/ssl_sock_ossl.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/ssl_sock_ossl.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -304,6 +304,7 @@ struct pj_ssl_cert_t</span><br><span style="color: hsl(0, 100%, 40%);">- static write_data_t* alloc_send_data(pj_ssl_sock_t *ssock, pj_size_t len);</span><br><span style="color: hsl(0, 100%, 40%);">- static void free_send_data(pj_ssl_sock_t *ssock, write_data_t *wdata);</span><br><span style="color: hsl(0, 100%, 40%);">- static pj_status_t flush_delayed_send(pj_ssl_sock_t *ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-+static void on_timer(pj_timer_heap_t *th, struct pj_timer_entry *te);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- /*</span><br><span style="color: hsl(0, 100%, 40%);">-  *******************************************************************</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1726,7 +1727,8 @@ static pj_bool_t on_handshake_complete(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-                   pj_timer_heap_cancel(ssock->param.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     &ssock->timer);</span><br><span style="color: hsl(0, 100%, 40%);">-                 }</span><br><span style="color: hsl(0, 100%, 40%);">--              ssock->timer.id = TIMER_CLOSE;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+             pj_timer_entry_reset(&ssock->timer, TIMER_CLOSE);</span><br><span style="color: hsl(0, 100%, 40%);">-                pj_time_val_normalize(&interval);</span><br><span style="color: hsl(0, 100%, 40%);">-           if (pj_timer_heap_schedule(ssock->param.timer_heap, </span><br><span style="color: hsl(0, 100%, 40%);">-                                            &ssock->timer, &interval) != 0)</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -2492,7 +2494,7 @@ static pj_bool_t asock_on_accept_complete (pj_activesock_t *asock,</span><br><span style="color: hsl(0, 100%, 40%);">-   ssock->param.timeout.msec != 0))</span><br><span style="color: hsl(0, 100%, 40%);">-     {</span><br><span style="color: hsl(0, 100%, 40%);">-       pj_assert(ssock->timer.id == TIMER_NONE);</span><br><span style="color: hsl(0, 100%, 40%);">--   ssock->timer.id = TIMER_HANDSHAKE_TIMEOUT;</span><br><span style="color: hsl(0, 100%, 40%);">-+  pj_timer_entry_reset(&ssock->timer, TIMER_HANDSHAKE_TIMEOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-    status = pj_timer_heap_schedule(ssock->param.timer_heap, </span><br><span style="color: hsl(0, 100%, 40%);">-                                    &ssock->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   &ssock->param.timeout);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -3538,7 +3540,7 @@ PJ_DEF(pj_status_t) pj_ssl_sock_start_connect( pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-        ssock->param.timeout.msec != 0))</span><br><span style="color: hsl(0, 100%, 40%);">-     {</span><br><span style="color: hsl(0, 100%, 40%);">-       pj_assert(ssock->timer.id == TIMER_NONE);</span><br><span style="color: hsl(0, 100%, 40%);">--   ssock->timer.id = TIMER_HANDSHAKE_TIMEOUT;</span><br><span style="color: hsl(0, 100%, 40%);">-+  pj_timer_entry_reset(&ssock->timer, TIMER_HANDSHAKE_TIMEOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-    status = pj_timer_heap_schedule(ssock->param.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     &ssock->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   &ssock->param.timeout);</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/timer.c b/pjlib/src/pj/timer.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 90a95e3..1312611 100644</span><br><span>---- a/pjlib/src/pj/timer.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/timer.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -472,6 +472,18 @@ PJ_DEF(pj_timer_entry*) pj_timer_entry_init( pj_timer_entry *entry,</span><br><span style="color: hsl(0, 100%, 40%);">-     return entry;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+PJ_DEF(pj_timer_entry*) pj_timer_entry_reset( pj_timer_entry *entry,</span><br><span style="color: hsl(0, 100%, 40%);">-+                                             int id)</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+    entry->id = id;</span><br><span style="color: hsl(0, 100%, 40%);">-+    entry->_grp_lock = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+    entry->_timer_id = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-+    entry->_timer_value = (pj_time_val){0, 0};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    return entry;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">- PJ_DEF(pj_bool_t) pj_timer_entry_running( pj_timer_entry *entry )</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     return (entry->_timer_id >= 1);</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjnath/ice_session.c b/pjnath/src/pjnath/ice_session.c</span><br><span style="color: hsl(0, 100%, 40%);">-index c51dba7..cbee91d 100644</span><br><span>---- a/pjnath/src/pjnath/ice_session.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjnath/ice_session.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1246,6 +1246,7 @@ done:</span><br><span style="color: hsl(0, 100%, 40%);">-                 ice->comp_cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-  pj_time_val_normalize(&delay);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&ice->timer, TIMER_KEEP_ALIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_heap_schedule_w_grp_lock(ice->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    &ice->timer, &delay,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         TIMER_KEEP_ALIVE,</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1276,7 +1277,7 @@ static void on_ice_complete(pj_ice_sess *ice, pj_status_t status)</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Call callback */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ice->cb.on_ice_complete) {</span><br><span style="color: hsl(0, 100%, 40%);">-           pj_time_val delay = {0, 0};</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">-+           pj_timer_entry_reset(&ice->timer, TIMER_COMPLETION_CALLBACK);</span><br><span style="color: hsl(0, 100%, 40%);">-            pj_timer_heap_schedule_w_grp_lock(ice->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            &ice->timer, &delay,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         TIMER_COMPLETION_CALLBACK,</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1507,6 +1508,7 @@ static pj_bool_t on_check_complete(pj_ice_sess *ice,</span><br><span style="color: hsl(0, 100%, 40%);">-                  delay.sec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                  delay.msec = ice->opt.controlled_agent_want_nom_timeout;</span><br><span style="color: hsl(0, 100%, 40%);">-                     pj_time_val_normalize(&delay);</span><br><span style="color: hsl(0, 100%, 40%);">-+             pj_timer_entry_reset(&ice->timer, TIMER_CONTROLLED_WAIT_NOM);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-                   pj_timer_heap_schedule_w_grp_lock(</span><br><span style="color: hsl(0, 100%, 40%);">-                                  ice->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1597,6 +1599,7 @@ static pj_bool_t on_check_complete(pj_ice_sess *ice,</span><br><span style="color: hsl(0, 100%, 40%);">-  delay.sec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  delay.msec = ice->opt.nominated_check_delay;</span><br><span style="color: hsl(0, 100%, 40%);">-         pj_time_val_normalize(&delay);</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_timer_entry_reset(&ice->timer, TIMER_START_NOMINATED_CHECK);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-      pj_timer_heap_schedule_w_grp_lock(ice->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    &ice->timer, &delay,</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1929,6 +1932,8 @@ static pj_status_t start_periodic_check(pj_timer_heap_t *th,</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_time_val timeout = {0, PJ_ICE_TA_VAL};</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-      pj_time_val_normalize(&timeout);</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_timer_entry_reset(&ice->timer, PJ_TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-        pj_timer_heap_schedule_w_grp_lock(th, te, &timeout, PJ_TRUE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          ice->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1986,6 +1991,7 @@ static void start_nominated_check(pj_ice_sess *ice)</span><br><span style="color: hsl(0, 100%, 40%);">-                                    &ice->clist.timer, PJ_FALSE);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     delay.sec = delay.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&ice->timer, PJ_TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">-     status = pj_timer_heap_schedule_w_grp_lock(ice->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                &ice->clist.timer, &delay,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                PJ_TRUE,</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -2125,6 +2131,7 @@ PJ_DEF(pj_status_t) pj_ice_sess_start_check(pj_ice_sess *ice)</span><br><span style="color: hsl(0, 100%, 40%);">-      * return start_periodic_check(ice->stun_cfg.timer_heap, &clist->timer);</span><br><span style="color: hsl(0, 100%, 40%);">-      */</span><br><span style="color: hsl(0, 100%, 40%);">-     delay.sec = delay.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&ice->timer, PJ_TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">-     status = pj_timer_heap_schedule_w_grp_lock(ice->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                &clist->timer, &delay,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                PJ_TRUE, ice->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjnath/nat_detect.c b/pjnath/src/pjnath/nat_detect.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 31b06c3..d1d7373 100644</span><br><span>---- a/pjnath/src/pjnath/nat_detect.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjnath/nat_detect.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -414,6 +414,7 @@ static void end_session(nat_detect_session *sess,</span><br><span style="color: hsl(0, 100%, 40%);">-     delay.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     sess->timer.id = TIMER_DESTROY;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&sess->timer, TIMER_DESTROY, sess, &on_sess_timer);</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_heap_schedule(sess->timer_heap, &sess->timer, &delay);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -933,6 +934,7 @@ static void on_sess_timer(pj_timer_heap_t *th,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-      if (next_timer) {</span><br><span style="color: hsl(0, 100%, 40%);">-           pj_time_val delay = {0, TEST_INTERVAL};</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_timer_entry_reset(te, TIMER_TEST);</span><br><span style="color: hsl(0, 100%, 40%);">-           pj_timer_heap_schedule(th, te, &delay);</span><br><span style="color: hsl(0, 100%, 40%);">-         } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            te->id = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjnath/stun_sock.c b/pjnath/src/pjnath/stun_sock.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 4031bb3..af3cc4a 100644</span><br><span>---- a/pjnath/src/pjnath/stun_sock.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjnath/stun_sock.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -880,7 +880,7 @@ static void start_ka_timer(pj_stun_sock *stun_sock)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     delay.sec = stun_sock->ka_interval;</span><br><span style="color: hsl(0, 100%, 40%);">-  delay.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">-+       pj_timer_entry_reset(&stun_sock->ka_timer, PJ_TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_heap_schedule_w_grp_lock(stun_sock->stun_cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      &stun_sock->ka_timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    &delay, PJ_TRUE,</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjnath/stun_transaction.c b/pjnath/src/pjnath/stun_transaction.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 28f6230..ad87b7b 100644</span><br><span>---- a/pjnath/src/pjnath/stun_transaction.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjnath/stun_transaction.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -86,11 +86,8 @@ PJ_DEF(pj_status_t) pj_stun_client_tsx_create(pj_stun_config *cfg,</span><br><span style="color: hsl(0, 100%, 40%);">-     tsx->grp_lock = grp_lock;</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_memcpy(&tsx->cb, cb, sizeof(*cb));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->retransmit_timer.cb = &retransmit_timer_callback;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->retransmit_timer.user_data = tsx;</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->destroy_timer.cb = &destroy_timer_callback;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->destroy_timer.user_data = tsx;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&tsx->retransmit_timer, 0, tsx, &retransmit_timer_callback);</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&tsx->destroy_timer, 0, tsx, &destroy_timer_callback);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     pj_ansi_snprintf(tsx->obj_name, sizeof(tsx->obj_name), "utsx%p", tsx);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -120,6 +117,7 @@ PJ_DEF(pj_status_t) pj_stun_client_tsx_schedule_destroy(</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_heap_cancel_if_active(tsx->timer_heap, &tsx->retransmit_timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    TIMER_INACTIVE);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&tsx->destroy_timer, TIMER_ACTIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-     status = pj_timer_heap_schedule_w_grp_lock(tsx->timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                &tsx->destroy_timer, delay,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                TIMER_ACTIVE, tsx->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -237,6 +235,7 @@ static pj_status_t tsx_transmit_msg(pj_stun_client_tsx *tsx,</span><br><span style="color: hsl(0, 100%, 40%);">-       * cancel it (as opposed to when schedule_timer() failed we cannot</span><br><span style="color: hsl(0, 100%, 40%);">-       * cancel transmission).</span><br><span style="color: hsl(0, 100%, 40%);">-         */;</span><br><span style="color: hsl(0, 100%, 40%);">-+   pj_timer_entry_reset(&tsx->retransmit_timer, TIMER_ACTIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-      status = pj_timer_heap_schedule_w_grp_lock(tsx->timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                             &tsx->retransmit_timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &tsx->retransmit_time,</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -315,6 +314,7 @@ PJ_DEF(pj_status_t) pj_stun_client_tsx_send_msg(pj_stun_client_tsx *tsx,</span><br><span style="color: hsl(0, 100%, 40%);">-     * cancel it (as opposed to when schedule_timer() failed we cannot</span><br><span style="color: hsl(0, 100%, 40%);">-       * cancel transmission).</span><br><span style="color: hsl(0, 100%, 40%);">-         */;</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_timer_entry_reset(&tsx->retransmit_timer, TIMER_ACTIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-         status = pj_timer_heap_schedule_w_grp_lock(tsx->timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                             &tsx->retransmit_timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  &tsx->retransmit_time,</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjnath/turn_session.c b/pjnath/src/pjnath/turn_session.c</span><br><span style="color: hsl(0, 100%, 40%);">-index bbea027..e4685e6 100644</span><br><span>---- a/pjnath/src/pjnath/turn_session.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjnath/turn_session.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -431,6 +431,7 @@ static void sess_shutdown(pj_turn_session *sess,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-      pj_timer_heap_cancel_if_active(sess->timer_heap, &sess->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       TIMER_NONE);</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&sess->timer, TIMER_DESTROY);</span><br><span style="color: hsl(0, 100%, 40%);">-       pj_timer_heap_schedule_w_grp_lock(sess->timer_heap, &sess->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       &delay, TIMER_DESTROY,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      sess->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1434,6 +1435,7 @@ static void on_allocate_success(pj_turn_session *sess,</span><br><span style="color: hsl(0, 100%, 40%);">-       timeout.sec = sess->ka_interval;</span><br><span style="color: hsl(0, 100%, 40%);">-     timeout.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+     pj_timer_entry_reset(&sess->timer, TIMER_KEEP_ALIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-    pj_timer_heap_schedule_w_grp_lock(sess->timer_heap, &sess->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       &timeout, TIMER_KEEP_ALIVE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         sess->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -2080,6 +2082,7 @@ static void on_timer_event(pj_timer_heap_t *th, pj_timer_entry *e)</span><br><span style="color: hsl(0, 100%, 40%);">-       delay.sec = sess->ka_interval;</span><br><span style="color: hsl(0, 100%, 40%);">-       delay.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+       pj_timer_entry_reset(&sess->timer, TIMER_KEEP_ALIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-            pj_timer_heap_schedule_w_grp_lock(sess->timer_heap, &sess->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               &delay, TIMER_KEEP_ALIVE,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           sess->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjnath/turn_sock.c b/pjnath/src/pjnath/turn_sock.c</span><br><span style="color: hsl(0, 100%, 40%);">-index a30ab51..5078580 100644</span><br><span>---- a/pjnath/src/pjnath/turn_sock.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjnath/turn_sock.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -928,6 +928,7 @@ static void turn_on_state(pj_turn_session *sess,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         pj_timer_heap_cancel_if_active(turn_sock->cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   &turn_sock->timer, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-+   pj_timer_entry_reset(&turn_sock->timer, TIMER_DESTROY);</span><br><span style="color: hsl(0, 100%, 40%);">-  pj_timer_heap_schedule_w_grp_lock(turn_sock->cfg.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           &turn_sock->timer,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       &delay, TIMER_DESTROY,</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjturn-srv/allocation.c b/pjnath/src/pjturn-srv/allocation.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 6c9c9ce..8853392 100644</span><br><span>---- a/pjnath/src/pjturn-srv/allocation.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjturn-srv/allocation.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -513,7 +513,7 @@ static void alloc_shutdown(pj_turn_allocation *alloc)</span><br><span style="color: hsl(0, 100%, 40%);">-      */</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Schedule destroy timer */</span><br><span style="color: hsl(0, 100%, 40%);">--    alloc->relay.timer.id = TIMER_ID_DESTROY;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&alloc->relay.timer, TIMER_ID_DESTROY);</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_heap_schedule(alloc->server->core.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                     &alloc->relay.timer, &destroy_delay);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -538,7 +538,7 @@ static pj_status_t resched_timeout(pj_turn_allocation *alloc)</span><br><span style="color: hsl(0, 100%, 40%);">-     delay.sec = alloc->relay.lifetime;</span><br><span style="color: hsl(0, 100%, 40%);">-     delay.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    alloc->relay.timer.id = TIMER_ID_TIMEOUT;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(&alloc->relay.timer, TIMER_ID_TIMEOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-     status = pj_timer_heap_schedule(alloc->server->core.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    &alloc->relay.timer, &delay);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (status != PJ_SUCCESS) {</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjnath/src/pjturn-srv/listener_tcp.c b/pjnath/src/pjturn-srv/listener_tcp.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 796ed47..4a9550c 100644</span><br><span>---- a/pjnath/src/pjturn-srv/listener_tcp.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjnath/src/pjturn-srv/listener_tcp.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -475,7 +475,7 @@ static void tcp_dec_ref(pj_turn_transport *tp,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     if (tcp->ref_cnt == 0 && tcp->timer.id == TIMER_NONE) {</span><br><span style="color: hsl(0, 100%, 40%);">-  pj_time_val delay = { SHUTDOWN_DELAY, 0 };</span><br><span style="color: hsl(0, 100%, 40%);">--     tcp->timer.id = TIMER_DESTROY;</span><br><span style="color: hsl(0, 100%, 40%);">-+      pj_timer_entry_reset(&tcp->timer, TIMER_DESTROY);</span><br><span style="color: hsl(0, 100%, 40%);">-        pj_timer_heap_schedule(tcp->base.listener->server->core.timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-                           &tcp->timer, &delay);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip-simple/evsub.c b/pjsip/src/pjsip-simple/evsub.c</span><br><span style="color: hsl(0, 100%, 40%);">-index eb66665..7748853 100644</span><br><span>---- a/pjsip/src/pjsip-simple/evsub.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip-simple/evsub.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -518,6 +518,7 @@ static void set_timer( pjsip_evsub *sub, int timer_id,</span><br><span style="color: hsl(0, 100%, 40%);">-    timeout.sec = seconds;</span><br><span style="color: hsl(0, 100%, 40%);">-  timeout.msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+     pj_timer_entry_reset(&sub->timer, timer_id);</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_heap_schedule_w_grp_lock(</span><br><span style="color: hsl(0, 100%, 40%);">-                          pjsip_endpt_get_timer_heap(sub->endpt),</span><br><span style="color: hsl(0, 100%, 40%);">-                      &sub->timer, &timeout, timer_id, sub->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -655,7 +656,7 @@ static void on_timer( pj_timer_heap_t *timer_heap,</span><br><span style="color: hsl(0, 100%, 40%);">-     /* If this timer entry has just been rescheduled or cancelled</span><br><span style="color: hsl(0, 100%, 40%);">-      * while waiting for dialog mutex, just return (see #1885 scenario 1).</span><br><span style="color: hsl(0, 100%, 40%);">-      */</span><br><span style="color: hsl(0, 100%, 40%);">--    if (pj_timer_entry_running(entry) || entry->id == TIMER_TYPE_NONE) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (entry->id == TIMER_TYPE_NONE) {</span><br><span style="color: hsl(0, 100%, 40%);">-    pjsip_dlg_dec_lock(sub->dlg);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -786,8 +787,7 @@ static pj_status_t evsub_create( pjsip_dialog *dlg,</span><br><span style="color: hsl(0, 100%, 40%);">-                      pjsip_hdr_clone(sub->pool, pkg->pkg_accept);</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_list_init(&sub->sub_hdr_list);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    sub->timer.user_data = sub;</span><br><span style="color: hsl(0, 100%, 40%);">--    sub->timer.cb = &on_timer;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&sub->timer, 0, sub, &on_timer);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Set name. */</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_ansi_snprintf(sub->obj_name, PJ_ARRAY_SIZE(sub->obj_name),</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip/sip_endpoint.c b/pjsip/src/pjsip/sip_endpoint.c</span><br><span style="color: hsl(0, 100%, 40%);">-index d810781..5c98a5b 100644</span><br><span>---- a/pjsip/src/pjsip/sip_endpoint.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip/sip_endpoint.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -788,6 +788,7 @@ PJ_DEF(pj_status_t) pjsip_endpt_schedule_timer_dbg(pjsip_endpoint *endpt,</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     PJ_LOG(6, (THIS_FILE, "pjsip_endpt_schedule_timer(entry=%p, delay=%u.%u)",</span><br><span style="color: hsl(0, 100%, 40%);">-                        entry, delay->sec, delay->msec));</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(entry, entry->id);</span><br><span style="color: hsl(0, 100%, 40%);">-     return pj_timer_heap_schedule_dbg(endpt->timer_heap, entry, delay,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       src_file, src_line);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -798,6 +799,7 @@ PJ_DEF(pj_status_t) pjsip_endpt_schedule_timer( pjsip_endpoint *endpt,</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     PJ_LOG(6, (THIS_FILE, "pjsip_endpt_schedule_timer(entry=%p, delay=%u.%u)",</span><br><span style="color: hsl(0, 100%, 40%);">-                      entry, delay->sec, delay->msec));</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(entry, entry->id);</span><br><span style="color: hsl(0, 100%, 40%);">-     return pj_timer_heap_schedule( endpt->timer_heap, entry, delay );</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- #endif</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -809,7 +811,7 @@ PJ_DEF(void) pjsip_endpt_cancel_timer( pjsip_endpoint *endpt,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     pj_timer_entry *entry )</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     PJ_LOG(6, (THIS_FILE, "pjsip_endpt_cancel_timer(entry=%p)", entry));</span><br><span style="color: hsl(0, 100%, 40%);">--    pj_timer_heap_cancel( endpt->timer_heap, entry );</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_heap_cancel_if_active( endpt->timer_heap, entry, 0 );</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- /*</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 4b7f852..173bd6a 100644</span><br><span>---- a/pjsip/src/pjsip/sip_transaction.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip/sip_transaction.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -978,6 +978,7 @@ static pj_status_t tsx_schedule_timer(pjsip_transaction *tsx,</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_status_t status;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     pj_assert(active_id != 0);</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_reset(entry, active_id);</span><br><span style="color: hsl(0, 100%, 40%);">-     status = pj_timer_heap_schedule_w_grp_lock(timer_heap, entry,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                delay, active_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                tsx->grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1019,12 +1020,8 @@ static pj_status_t tsx_create( pjsip_module *tsx_user,</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_memcpy(pool->obj_name, tsx->obj_name, sizeof(pool->obj_name));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     tsx->handle_200resp = 1;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->retransmit_timer.id = TIMER_INACTIVE;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->retransmit_timer.user_data = tsx;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->retransmit_timer.cb = &tsx_timer_callback;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->timeout_timer.id = TIMER_INACTIVE;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->timeout_timer.user_data = tsx;</span><br><span style="color: hsl(0, 100%, 40%);">--    tsx->timeout_timer.cb = &tsx_timer_callback;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&tsx->retransmit_timer, TIMER_INACTIVE, tsx, &tsx_timer_callback);</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&tsx->timeout_timer, TIMER_INACTIVE, tsx, &tsx_timer_callback);</span><br><span style="color: hsl(0, 100%, 40%);">-     </span><br><span style="color: hsl(0, 100%, 40%);">-     if (grp_lock) {</span><br><span style="color: hsl(0, 100%, 40%);">-         tsx->grp_lock = grp_lock;</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 17e9142..22f4dc1 100644</span><br><span>---- a/pjsip/src/pjsip/sip_transport.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip/sip_transport.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1139,8 +1139,7 @@ PJ_DEF(pj_status_t) pjsip_transport_register( pjsip_tpmgr *mgr,</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Init. */</span><br><span style="color: hsl(0, 100%, 40%);">-     tp->tpmgr = mgr;</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_bzero(&tp->idle_timer, sizeof(tp->idle_timer));</span><br><span style="color: hsl(0, 100%, 40%);">--    tp->idle_timer.user_data = tp;</span><br><span style="color: hsl(0, 100%, 40%);">--    tp->idle_timer.cb = &transport_idle_callback;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_timer_entry_init(&tp->idle_timer, 0, tp, &transport_idle_callback);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* </span><br><span style="color: hsl(0, 100%, 40%);">-      * Register to hash table (see Trac ticket #42).</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.7.4</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/10487">change 10487</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/10487"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I4fe0b4bc648f7be5903cf4531b94fc87275713c1 </div>
<div style="display:none"> Gerrit-Change-Number: 10487 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Mudgett <rmudgett@digium.com> </div>