From: Andrew P. <at...@pi...> - 2014-10-16 02:06:55
|
On Wed, Oct 15, 2014 at 10:24:19PM +0100, Stephen wrote: > You have a known good revision: aolserver-4.0.10, a known bad: tip, > and an automated test to distinguish between the two states: > nsthreadtest. Try 'hg bisect ...' to figure out where the error was > introduced. Good idea. The automatic bisect didn't give me the answer, but it did get me started down a useful path. The culprit with nsthreadtest seems to be, Tcl 8.5! I typically generate and run the configure script like this: AUTOCONF=autoconf2.50 ./autogen.sh --prefix=$inst_dir --enable-symbols --enable-rpath --with-tcl=/usr/lib/tcl8.5 --with-zlib=/usr/lib Turns out, it doesn't matter what version of the C code I use, and it doesn't matter if I run autoconf from the tip or use the ancient configure script from 2005 (which was deleted on 2005-10-09 in rev 1345:f6af29cbe4fb). All that seems to matter, is that nsthreadtest ALWAYS fails when I configured with this: --with-tcl=/usr/lib/tcl8.5 And if I instead use Tcl 8.4 like this it works fine: --with-tcl=/usr/lib/tcl8.4 I can imagine several possible causes for this: - A bug in Tcl 8.5. - A bug in how Naviserver uses Tcl 8.5. - Some side effect of the configure process. - A broken Tcl 8.5 on my machine(s). Note that I see the very same sort of nsthreadtest failures on Windows 7. I never run configure or autoconf on Windows. Unfortunately there is some crosstalk with Linux, because the Windows build uses some subset of the stuff (via NFS) generated by Linux configure. (That is horribly ugly, but hasn't seemed to break anything so far and I haven't gone back and tried to fix it yet.) On Linux I am using the stock Tcl 8.4 and 8.5 included with Ubuntu 10.04.4 LTS. On Windows 7 I am using ActiveTcl 8.4 and 8.5 (32-bit), both installed into the same C:\P\tcl-32\ directory tree. So, what could possibly be wrong here that shows itself by nsthreadtest passing with Tcl 8.4, but crashing with 8.5? Next, I rebuilt my 32-bit Naviserver on Windows with ActiveTcl 8.4, and its nsthreadtest now passes too! So Linux and Windows are consistent, 8.4 nsthreadtest works, 8.5 fails. Unfortunately, Linux and Windows are consistent in another way - on both platforms, my new Tcl 8.4 Naviserver build fails in at least two ways: One, running Naviserver with the sample conf/nsd-config.tcl file dumps core. On Linux that happens while running in NsConfigEval(); the backtrace is below. Two, running "nsd -c" throws a Tcl backtrace: bad option "ensemble": must be children, code, current, delete, eval, exists, export, forget, import, inscope, origin, parent, qualifiers, tail, or which while executing "namespace ensemble exists $cmd" invoked from within "nstrace::statescript" I will try to debug these new 8.4 failures more tomorrow. # Linux, Tcl 8.4, nsthreadtest passes but Naviserver fails like this: warning: Can't read pathname for load map: Input/output error. [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/nsd-t84-atp-1/bin/nsd -f -t /usr/local/nsd-t84-atp-1/conf/nsd-config'. Program terminated with signal 6, Aborted. #0 0x00007fb77715d425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt #0 0x00007fb77715d425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #1 0x00007fb777160b8b in __GI_abort () at abort.c:91 #2 0x00007fb77752a4d9 in Panic (fmt=<optimized out>) at log.c:616 #3 0x00007fb77687f29d in Tcl_PanicVA () from /usr/lib/libtcl8.4.so.0 #4 0x00007fb77687f409 in Tcl_Panic () from /usr/lib/libtcl8.4.so.0 #5 <signal handler called> #6 0x00007fb776862b89 in Tcl_CreateHashEntry () from /usr/lib/libtcl8.4.so.0 #7 0x00007fb777542382 in Ns_TclDestroyInterp (interp=0x1497730) at tclinit.c:521 #8 0x00007fb7775193ac in NsConfigEval ( config=0x14af160 "#set", ' ' <repeats 13 times>, "home", ' ' <repeats 16 times>, "/usr/local/ns\nset", ' ' <repeats 13 times>, "home", ' ' <repeats 16 times>, "[file dirname [file dirname [info nameofexec\ utable]]]\n\nns_section \"ns/server/default/modules\"\nns_param "..., argc=4, argv=<optimized out>, optind=4) at config.c:717 #9 0x00007fb77752c8ac in Ns_Main (argc=4, argv=0x7fff38339a18, initProc=0x400750 <ServerInit>) at nsmain.c:449 #10 0x00007fb77714876d in __libc_start_main (main=0x400660 <main>, argc=4, ubp_av=0x7fff38339a18, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff38339a08) at libc-start.c:226 #11 0x0000000000400695 in _start () (gdb) -- Andrew Piskorski <at...@pi...> |