[IRCServices] Services 4.5pre6 released
David Narayan
jester at phrixus.net
Mon Feb 12 07:14:05 PST 2001
>>Last time I tried using StatServ (with IRCServices 4.4.8 and
>>DreamForge-based ircd), after a few netsplits and netbursts, Services
>>would enter an infinite loop and stop responding. Has this been fixed
>>for 4.5.0, or should I go back and try to do it again to find a fix for
>>it?
>
> This may be fixed for pre6--I was never able to duplicate it
> myself, but
> I've fixed and cleaned up a lot of StatServ code for this release.
>
Using ircservices4.4.9 I was able to duplicate it. Granted much of
the code may have changed between this version and 4.4.5 but using
gdb indicates where services locks up.
To lock it, I had a 3 server network (tested with unreal and df467)
and I /squit'ed the two leafs from the hub. After the second leaf
reconnected, services would not respond. Attaching gdb to the process
indicates the following.
--- gdb output ---
Attaching to program: /usr/local/bin/services, Pid 10163
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /lib/libresolv.so.2...done.
Loaded symbols for /lib/libresolv.so.2
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from /lib/libnss_nisplus.so.2...done.
Loaded symbols for /lib/libnss_nisplus.so.2
Reading symbols from /lib/libnss_nis.so.2...done.
Loaded symbols for /lib/libnss_nis.so.2
stats_do_server (servername=0xbffff7b7 "entropy2.phrixus.net",
serverhub=0xbffff9f0 "entropy.phrixus.net")
at statistics.c:598
598 tmpserver = tmpserver->sibling;
(gdb) list
593 if (!server->hub->child) {
594 server->hub->child = server;
595 } else {
596 tmpserver = server->hub->child;
597 while (tmpserver->sibling)
598 tmpserver = tmpserver->sibling;
599 tmpserver->sibling = server;
600 }
601 }
602 }
(gdb) bt
#0 stats_do_server (servername=0xbffff7b7 "entropy2.phrixus.net",
serverhub=0xbffff9f0 "entropy.phrixus.net")
at statistics.c:598
#1 0x806661f in do_server (source=0xbffff9f0 "entropy.phrixus.net", ac=3,
av=0x812db58) at servers.c:153
#2 0x8066070 in process () at process.c:179
#3 0x80598e1 in main (ac=1, av=0xbffffae4, envp=0xbffffaec) at main.c:274
#4 0x40061f31 in __libc_start_main (main=0x80595e4 <main>, argc=1,
ubp_av=0xbffffae4, init=0x8049028 <_init>,
fini=0x806b5ac <_fini>, rtld_fini=0x4000e274 <_dl_fini>,
stack_end=0xbffffadc)
at ../sysdeps/generic/libc-start.c:129
(gdb)
Presumably this means that it is stuck in the while loop, since
tmpserver->sibling is always "true".
-David
--
David Narayan
jester at phrixus.net