diff options
-rw-r--r-- | pjsip/src/pjsip-ua/sip_reg.c | 7 |
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), + ®c->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; } |