[Pdns-dev] PowerDNS Recursor 3.1.5 snapshot 3 available

James Cloos cloos at jhcloos.com
Tue Feb 12 21:23:43 CET 2008


>>>>> "bert" == bert hubert <bert.hubert at netherlabs.nl> writes:

>> I just noticed that the recusror is SEGVing on my laptop, and a test of
>> 3.1.5 snap 3 does as well.

Actually, I was testing snap 4 rather than snap 3.  Looks like I replied
to the wrong announcement....

bert> Can you rerun with --stack-size=1000000 to see if the problem goes away?

That does prevent the SEGV.  A binary search turned up 262053 as the
minimum stack-size to prevent the SEGV.

I'm letting the installed version run now with stack-size=262144 in the
recursor.conf.  It seems to be happy.

bert> I've never yet tried glibc-2.7, it might be important.

That was my suspicion as well.  Gentoo is only using it on the ~ arches
(akin to deb's testing); Debian uses it for lenny/sid; Ubuntu for hardy.
I took a look at fedoraproject.org and opensuse.org, but wasn't able to
quickly find out what version they are using.  I didn't check on any of
the BSDs.

bert> Could you try valgrind? It might also have relevant things to say.

Using no valgrind options (therefore the memcheck tool), this is the
interesting output:

==20378== Invalid write of size 4
==20378==    at 0x41D0BEF: makecontext (in /lib/libc-2.7.so)
==20378==    by 0x809E225: serviceMain(int, char**) (pdns_recursor.cc:1744)
==20378==    by 0x80A380E: main (pdns_recursor.cc:1908)
==20378==  Address 0x4326310 is 8 bytes after a block of size 200,000 alloc'd
==20378==    at 0x4023F04: operator new[](unsigned) (vg_replace_malloc.c:268)
==20378==    by 0x80B61AB: MTasker<PacketID, std::string>::makeThread(void (*)(void*), void*) (mtasker.cc:246)
==20378==    by 0x809E225: serviceMain(int, char**) (pdns_recursor.cc:1744)
==20378==    by 0x80A380E: main (pdns_recursor.cc:1908)
==20378== 
==20378== Invalid write of size 4
==20378==    at 0x41D0BF9: makecontext (in /lib/libc-2.7.so)
==20378==    by 0x809E225: serviceMain(int, char**) (pdns_recursor.cc:1744)
==20378==    by 0x80A380E: main (pdns_recursor.cc:1908)
==20378==  Address 0x432630c is 4 bytes after a block of size 200,000 alloc'd
==20378==    at 0x4023F04: operator new[](unsigned) (vg_replace_malloc.c:268)
==20378==    by 0x80B61AB: MTasker<PacketID, std::string>::makeThread(void (*)(void*), void*) (mtasker.cc:246)
==20378==    by 0x809E225: serviceMain(int, char**) (pdns_recursor.cc:1744)
==20378==    by 0x80A380E: main (pdns_recursor.cc:1908)
==20378== Warning: client switching stacks?  SP change: 0xBEC64BEC --> 0x43262F8
==20378==          to suppress, use: --max-stackframe=1164711692 or greater
==20378== 
==20378== Invalid read of size 4
==20378==    at 0x80B625C: MTasker<PacketID, std::string>::threadWrapper(MTasker<PacketID, std::string>*, void (*)(void*), int, void*) (mtasker.cc:356)
==20378==  Address 0x432630c is on thread 1's stack

Running in valgrind the SEGVs are suppressed and the lookups work, but
output like the above is printed for every lookup.  That is of course
w/o specifying --stack-size.

I'll test it out some more in valgrind and post if anything interesting
shows up.

-JimC
-- 
James Cloos <cloos at jhcloos.com>         OpenPGP: 1024D/ED7DAEA6


More information about the Pdns-dev mailing list