freebsd-ports/net/zebra/files/patch-ospfd_ospf_lsa.c
Munechika SUMIKAWA 0f4b97f921 Fix infinite loop when time got backwards
PR:		ports/78302
Submitted by:	marck
2005-05-19 09:28:47 +00:00

37 lines
1.3 KiB
C

--- ospfd/ospf_lsa.c.orig Mon Feb 28 03:09:10 2005
+++ ospfd/ospf_lsa.c Thu May 19 17:59:09 2005
@@ -3324,6 +3324,7 @@
listnode node;
struct ospf *ospf = THREAD_ARG (t);
int i;
+ time_t ct;
list lsa_to_refresh = list_new ();
if (IS_DEBUG_OSPF (lsa, LSA_REFRESH))
@@ -3331,15 +3332,25 @@
i = ospf->lsa_refresh_queue.index;
+
+ if ((ct = time(NULL)) < ospf->lsa_refresher_started) {
+ zlog_info ("LSA[Refresh]: ospf_lsa_refresh_walker(): HACK: fixing lsa_refresher_started: %d -> %d", ospf->lsa_refresher_started, ct);
+ ospf->lsa_refresher_started = ct;
+ }
ospf->lsa_refresh_queue.index =
(ospf->lsa_refresh_queue.index +
- (time (NULL) - ospf->lsa_refresher_started) / OSPF_LSA_REFRESHER_GRANULARITY)
+ (ct - ospf->lsa_refresher_started) / OSPF_LSA_REFRESHER_GRANULARITY)
% OSPF_LSA_REFRESHER_SLOTS;
if (IS_DEBUG_OSPF (lsa, LSA_REFRESH))
zlog_info ("LSA[Refresh]: ospf_lsa_refresh_walker(): next index %d",
ospf->lsa_refresh_queue.index);
+
+ if (ospf->lsa_refresh_queue.index >= OSPF_LSA_REFRESHER_SLOTS) {
+ zlog_info ("LSA[Refresh]: ospf_lsa_refresh_walker(): HACK: fixing index: %hu -> 0", ospf->lsa_refresh_queue.index);
+ ospf->lsa_refresh_queue.index = 0;
+ }
for (;i != ospf->lsa_refresh_queue.index;
i = (i + 1) % OSPF_LSA_REFRESHER_SLOTS)