[radvd-devel-l] losing default route
Pekka Savola
pekkas at netcore.fi
Sat Jul 23 09:41:05 EDT 2005
On Sat, 23 Jul 2005, Tomasz Grobelny wrote:
> man says there are only 4 levels... But with "-d 5" before last message I get
> "calling schedule_timer from alarm_handler context".
Ok.
I did quite a bit of debugging on this, and I suspect the problem is
that for some reason, radvd can't exit the while loop in
timer.c:alarm_handler().
Could you add the attached code which adds a bit of debugging in this
code path, and report the results?
>> Have you tried whether this worked in 0.7.2? (There were some changes
>> in timestamp usage in 0.7.3)
>>
> I had 0.7.2 and it worked just fine. Then I upgraded both client and router OS
> (PLD Linux) and found that it stopped working. Then I thought that maybe the
> bug is fixed in 0.8 so I tried this version, without success.
Could you please test 0.7.2 again? I see only very few changes
between 0.7.2 and 0.8 which should affect this, so I'd like to be
double sure about this.
>> If you want to try look at this, you could try adding
>> a bit of debugging printing in the middle 'else
>> if' of process.c:process_rs().. you could also try uncommenting the
>> clear_timer line there.
>>
> It is already uncommented.
Sorry, I meant commenting out, but based on deeper investigation, this
shouldn't be causing the issue.
--
Pekka Savola "You each name yourselves king, yet the
Netcore Oy kingdom bleeds."
Systems. Networks. Security. -- George R.R. Martin: A Clash of Kings
-------------- next part --------------
Index: timer.c
===================================================================
RCS file: /work/cvsroot/radvd/timer.c,v
retrieving revision 1.6
diff -u -r1.6 timer.c
--- timer.c 14 Nov 2001 19:58:11 -0000 1.6
+++ timer.c 23 Jul 2005 13:38:18 -0000
@@ -133,6 +133,9 @@
|| ((tm->expires.tv_sec == tv.tv_sec)
&& (tm->expires.tv_usec <= tv.tv_usec)))
{
+ dlog(LOG_DEBUG, 5, "alarm_handler: expiry: %ld.%ld, now: %ld.%ld; entering the loop.",
+ tm->expires.tv_sec, tm->expires.tv_use, tv.tv_sec, tv.tv_usec);
+
tm->prev->next = tm->next;
tm->next->prev = tm->prev;
@@ -140,7 +143,11 @@
tm = tm->next;
back->prev = back->next = NULL;
+ dlog(LOG_DEBUG, 5, "alarm_handler: prior to calling the handler");
+
(*back->handler)(back->data);
+
+ dlog(LOG_DEBUG, 5, "alarm_handler: after calling the handler");
}
dlog(LOG_DEBUG, 5, "calling schedule_timer from alarm_handler context");
More information about the radvd-devel-l
mailing list