[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