Merge pull request #11637 from opensourcerouting/fix/remaining_sec_for_null

*: thread_timer_remain_second NULL handling
This commit is contained in:
Donald Sharp 2022-07-19 12:07:02 -04:00 committed by GitHub
commit a741212913
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 46 deletions

View File

@ -744,19 +744,17 @@ static void rfapiMonitorTimerExpire(struct thread *t)
static void rfapiMonitorTimerRestart(struct rfapi_monitor_vpn *m)
{
if (m->timer) {
unsigned long remain = thread_timer_remain_second(m->timer);
unsigned long remain = thread_timer_remain_second(m->timer);
/* unexpected case, but avoid wraparound problems below */
if (remain > m->rfd->response_lifetime)
return;
/* unexpected case, but avoid wraparound problems below */
if (remain > m->rfd->response_lifetime)
return;
/* don't restart if we just restarted recently */
if (m->rfd->response_lifetime - remain < 2)
return;
/* don't restart if we just restarted recently */
if (m->rfd->response_lifetime - remain < 2)
return;
thread_cancel(&m->timer);
}
THREAD_OFF(m->timer);
{
char buf[BUFSIZ];
@ -766,7 +764,7 @@ static void rfapiMonitorTimerRestart(struct rfapi_monitor_vpn *m)
rfapi_ntop(m->p.family, m->p.u.val, buf, BUFSIZ),
m->rfd->response_lifetime);
}
m->timer = NULL;
thread_add_timer(bm->master, rfapiMonitorTimerExpire, m,
m->rfd->response_lifetime, &m->timer);
}
@ -1054,19 +1052,17 @@ static void rfapiMonitorEthTimerExpire(struct thread *t)
static void rfapiMonitorEthTimerRestart(struct rfapi_monitor_eth *m)
{
if (m->timer) {
unsigned long remain = thread_timer_remain_second(m->timer);
unsigned long remain = thread_timer_remain_second(m->timer);
/* unexpected case, but avoid wraparound problems below */
if (remain > m->rfd->response_lifetime)
return;
/* unexpected case, but avoid wraparound problems below */
if (remain > m->rfd->response_lifetime)
return;
/* don't restart if we just restarted recently */
if (m->rfd->response_lifetime - remain < 2)
return;
/* don't restart if we just restarted recently */
if (m->rfd->response_lifetime - remain < 2)
return;
thread_cancel(&m->timer);
}
THREAD_OFF(m->timer);
{
char buf[BUFSIZ];
@ -1076,7 +1072,7 @@ static void rfapiMonitorEthTimerRestart(struct rfapi_monitor_eth *m)
rfapiEthAddr2Str(&m->macaddr, buf, BUFSIZ),
m->rfd->response_lifetime);
}
m->timer = NULL;
thread_add_timer(bm->master, rfapiMonitorEthTimerExpire, m,
m->rfd->response_lifetime, &m->timer);
}

View File

@ -928,12 +928,9 @@ int rfapiShowVncQueries(void *stream, struct prefix *pfx_match)
} else
fp(out, "%-15s %-15s", "", "");
buf_remain[0] = 0;
if (m->timer) {
rfapiFormatSeconds(
thread_timer_remain_second(
m->timer),
buf_remain, BUFSIZ);
}
rfapiFormatSeconds(
thread_timer_remain_second(m->timer),
buf_remain, BUFSIZ);
fp(out, " %-15s %-10s\n",
inet_ntop(m->p.family, &m->p.u.prefix,
buf_pfx, BUFSIZ),
@ -1005,12 +1002,9 @@ int rfapiShowVncQueries(void *stream, struct prefix *pfx_match)
} else
fp(out, "%-15s %-15s", "", "");
buf_remain[0] = 0;
if (mon_eth->timer) {
rfapiFormatSeconds(
thread_timer_remain_second(
mon_eth->timer),
buf_remain, BUFSIZ);
}
rfapiFormatSeconds(thread_timer_remain_second(
mon_eth->timer),
buf_remain, BUFSIZ);
fp(out, " %-17s %10d %-10s\n",
rfapi_ntop(pfx_mac.family, &pfx_mac.u.prefix,
buf_pfx, BUFSIZ),

View File

@ -386,9 +386,7 @@ adj_to_ctl(struct adj *adj)
}
actl.holdtime = adj->holdtime;
actl.holdtime_remaining =
thread_is_scheduled(adj->inactivity_timer)
? thread_timer_remain_second(adj->inactivity_timer)
: 0;
thread_timer_remain_second(adj->inactivity_timer);
actl.trans_addr = adj->trans_addr;
actl.ds_tlv = adj->ds_tlv;

View File

@ -543,11 +543,8 @@ ldp_sync_to_ctl(struct iface *iface)
ictl.wait_time = if_get_wait_for_sync_interval();
ictl.timer_running = iface->ldp_sync.wait_for_sync_timer ? true : false;
if (iface->ldp_sync.wait_for_sync_timer)
ictl.wait_time_remaining =
ictl.wait_time_remaining =
thread_timer_remain_second(iface->ldp_sync.wait_for_sync_timer);
else
ictl.wait_time_remaining = 0;
memset(&ictl.peer_ldp_id, 0, sizeof(ictl.peer_ldp_id));

View File

@ -847,11 +847,8 @@ nbr_to_ctl(struct nbr *nbr)
nctl.stats = nbr->stats;
nctl.flags = nbr->flags;
nctl.max_pdu_len = nbr->max_pdu_len;
if (nbr->keepalive_timer)
nctl.hold_time_remaining =
thread_timer_remain_second(nbr->keepalive_timer);
else
nctl.hold_time_remaining = 0;
nctl.hold_time_remaining =
thread_timer_remain_second(nbr->keepalive_timer);
gettimeofday(&now, NULL);
if (nbr->state == NBR_STA_OPER) {

View File

@ -756,6 +756,9 @@ unsigned long thread_timer_remain_msec(struct thread *thread)
{
int64_t remain;
if (!thread_is_scheduled(thread))
return 0;
frr_with_mutex(&thread->mtx) {
remain = monotime_until(&thread->u.sands, NULL) / 1000LL;
}