<p>Jenkins2 <strong>merged</strong> this change.</p><p><a href="https://gerrit.asterisk.org/10489">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Joshua Colp: Looks good to me, but someone else must approve
George Joseph: Looks good to me, approved
Jenkins2: Approved for Submit
</div><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;"><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/10489">change 10489</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/10489"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I4fe0b4bc648f7be5903cf4531b94fc87275713c1 </div>
<div style="display:none"> Gerrit-Change-Number: 10489 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Mudgett <rmudgett@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins2 (1000185) </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@digium.com> </div>