summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjsip/src/pjsip-ua/sip_reg.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_reg.c b/pjsip/src/pjsip-ua/sip_reg.c
index efc209b6..3333317b 100644
--- a/pjsip/src/pjsip-ua/sip_reg.c
+++ b/pjsip/src/pjsip-ua/sip_reg.c
@@ -792,6 +792,9 @@ static void schedule_registration ( pjsip_regc *regc, pj_int32_t expiration )
if (regc->auto_reg && expiration > 0) {
pj_time_val delay = { 0, 0};
+ pj_timer_heap_cancel_if_active(pjsip_endpt_get_timer_heap(regc->endpt),
+ &regc->timer, 0);
+
delay.sec = expiration - regc->delay_before_refresh;
if (regc->expires != PJSIP_REGC_EXPIRATION_NOT_SPECIFIED &&
delay.sec > (pj_int32_t)regc->expires)
@@ -837,6 +840,8 @@ pjsip_regc_set_delay_before_refresh( pjsip_regc *regc,
if (delay > regc->expires)
return PJ_ETOOBIG;
+ pj_lock_acquire(regc->lock);
+
if (regc->delay_before_refresh != delay)
{
regc->delay_before_refresh = delay;
@@ -851,6 +856,8 @@ pjsip_regc_set_delay_before_refresh( pjsip_regc *regc,
}
}
+ pj_lock_release(regc->lock);
+
return PJ_SUCCESS;
}