Hey Greg et al. I'd betcha your problem is almost certainly caused by your use of DSOs. If you *really* want to prune your system down to see where your bug is, then build apache and mod_perl statically. There was a very well-known bug that caused DBI to segfault if it was run under a DSO. Please rebuild your binary and then let us know if that was the problem.
Kyle Dawkins Central Park Software http://www.centralparksoftware.com > Okay, I've been staring at this problem for close to 48 hours straight > now and have finally narrowed it down to a set of lines of code. > > So let me first expand. > > I currently have a system running, with Apache 1.3.14 and Mod_Perl 1.24 > on Redhat 7.0 (yeah REALLY REALLY ancient) and Perl 5.005003. It also > has mod_ssl, and several other modules loaded, but for the sake of the > problems I am having, I completely removed those. > > This actually runs perl scripts that connect and talk to (yeah dig > this), Postgres, Mysql, and Informix. The root of my problems, as I > have finally found, is Informix. > > In our httpd.conf, we utilize a PerlScript directive to preload a bunch > of environment variables, and other stuff at startup. The script is > pretty nasty and harry, and buried deep within it happened to be a call > to Informix. > > So for the record, the current system (ancient stuff) works. > > So the problems began. I decided to upgrade to Apache 1.3.26 and > Mod_Perl 1.27 on Debian Woody (3.0) and Perl 5.006001. I also built all > the other libraries, and than the fun began. > > At first, I just got seg faults attempting to start apache. But as I > have said above, I have narrowed it down to a set of lines of code that > cause it to fail. > > So if I build Apache 1.3.26 and Mod_perl 1.27 by themselves, using > pretty straight forward options.. > > Apache > ------ > CC="gcc" \ > CFLAGS="-g" \ > LIBS="-L/home/grumple/src/test/lib > -L/home/grumple/src/test/system/lib " \ > ./configure \ > "--prefix=/home/grumple/src/test/system" \ > "--enable-module=most" \ > "--enable-shared=max" \ > "--with-layout=GNU" \ > "--disable-rule=EXPAT" \ > "$@" > ---------------------- > > and > > Mod_perl > -------- > perl Makefile.PL PERL_USELARGEFILES=0 PERL_DEBUG=1 USE_APXS=1 WITH_APXS=/home/grumple/src/test/system/sbin/apxs EVERYTHING=1 INC=/home/grumple/src/test/system/include > ---------------------- > > and than my conf > > httpd.conf > ---------- > AccessConfig /dev/null > ResourceConfig /dev/null > > LoadModule env_module libexec/mod_env.so > LoadModule config_log_module libexec/mod_log_config.so > LoadModule mime_module libexec/mod_mime.so > LoadModule autoindex_module libexec/mod_autoindex.so > LoadModule dir_module libexec/mod_dir.so > LoadModule alias_module libexec/mod_alias.so > LoadModule access_module libexec/mod_access.so > LoadModule auth_module libexec/mod_auth.so > LoadModule setenvif_module libexec/mod_setenvif.so > > AddModule mod_env.c > AddModule mod_log_config.c > AddModule mod_mime.c > AddModule mod_autoindex.c > AddModule mod_dir.c > AddModule mod_alias.c > AddModule mod_access.c > AddModule mod_auth.c > AddModule mod_setenvif.c > > ServerType standalone > ServerRoot "/home/grumple/src/test/system" > > PidFile /var/tmp/run/test.pid > LockFile /var/tmp/test.lock > ScoreBoardFile /var/tmp/test.scoreboard > > Timeout 300 > KeepAlive On > MaxKeepAliveRequests 100 > KeepAliveTimeout 15 > MinSpareServers 2 > MaxSpareServers 10 > StartServers 3 > MaxClients 256 > MaxRequestsPerChild 1000 > > LoadModule perl_module libexec/libperl.so > AddModule mod_perl.c > > ServerName grumple > Port 6180 > > Listen 6180 > > ServerAdmin yeah@right > DocumentRoot /home/grumple/src/test/www/htdocs > > <Directory /> > Options FollowSymLinks > AllowOverride None > </Directory> > > <Directory "/home/grumple/src/test/www/htdocs"> > Options FollowSymLinks > AllowOverride None > Order allow,deny > Allow from all > </Directory> > > DirectoryIndex index.tp index.htm index.html index.cgi > AccessFileName .htaccess > <Files .htaccess> > Order allow,deny > Deny from all > </Files> > > UseCanonicalName On > TypesConfig "/home/grumple/src/test/system/etc/httpd/mime.types" > DefaultType text/plain > HostnameLookups Off > LogLevel warn > > LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined > CustomLog "/var/tmp/logs/test.access" combined > ErrorLog "/var/tmp/logs/test.errors" > > ReadmeName README > HeaderName HEADER > > IndexOptions FancyIndexing > IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t > > AddEncoding x-compress Z > AddEncoding x-gzip gz > > AddHandler send-as-is asis > AddHandler imap-file map > > BrowserMatch "Mozilla/2" nokeepalive > BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 > BrowserMatch "RealPlayer 4\.0" force-response-1.0 > BrowserMatch "Java/1\.0" force-response-1.0 > BrowserMatch "JDK/1\.0" force-response-1.0 > > AddHandler cgi-script .cgi > PerlScript /var/tmp/test.pl > > AddType application/x-x509-ca-cert .crt > AddType application/x-pkcs7-crl .crl > > ErrorDocument 404 /index.tp > ---------------------- > > And here's the magical part, the test.pl script that causes the problem. > > test.pl > ------- > BEGIN { > unshift(@INC, qw( > /home/grumple/src/test/lib/perl5 > /home/grumple/src/test/system/lib/perl5 > )); > } > > use strict; > > use DBI; > use DBD::Informix; > > ## informix connection params > $ENV{'INFORMIXDIR'} ||= '/opt/informix'; > $ENV{'INFORMIXSERVER'} ||= 'test_tcp'; > $ENV{'LD_LIBRARY_PATH'} .= ":$ENV{'INFORMIXDIR'}/lib"; > > my $catalog = 'test'; > my $constr = join(':', 'dbi', 'Informix', $catalog); > my $user = 'test'; > my $password = 'test'; > > my $dbh = DBI->connect($constr,$user,$password); > > $dbh->disconnect(); > > 1; > ---------------------- > > So all looks good right? Well it does, other than running above yields > the following crash in GDB. > > Program received signal SIGSEGV, Segmentation fault. > 0x400e7a90 in free () from /lib/libc.so.6 > (gdb) bt > #0 0x400e7a90 in free () from /lib/libc.so.6 > #1 0x40255d3b in Perl_safefree () from /usr/lib/libperl.so.5.6 > #2 0x402705eb in Perl_sv_clear () from /usr/lib/libperl.so.5.6 > #3 0x4027088f in Perl_sv_free () from /usr/lib/libperl.so.5.6 > #4 0x40274d6f in Perl_sv_vcatpvfn () from /usr/lib/libperl.so.5.6 > #5 0x4026a378 in Perl_sv_add_arena () from /usr/lib/libperl.so.5.6 > #6 0x4026a434 in Perl_sv_clean_all () from /usr/lib/libperl.so.5.6 > #7 0x40219b75 in perl_destruct () from /usr/lib/libperl.so.5.6 > #8 0x401bbb77 in perl_shutdown (s=0x0, p=0x0) at mod_perl.c:294 > #9 0x401bc507 in mp_dso_unload (data=0x8094bdc) at mod_perl.c:489 > #10 0x08050c39 in run_cleanups (c=0x80a06cc) at alloc.c:1713 > #11 0x0804f2d5 in ap_clear_pool (a=0x8094bdc) at alloc.c:538 > #12 0x08060bfc in standalone_main (argc=6, argv=0xbffffac4) at http_main.c:5058 > #13 0x080615cc in main (argc=6, argv=0xbffffac4) at http_main.c:5448 > > The test.pl script works fine by it's self. Turning on full PERL > debugging/tracing yields that the actual script has fully finished, and > that it's in the tear down of the actualy perl stuff that this failure > is coming from. Not from the script per se. But it is the script that > is causing this problem. Commenting out the connect and disconnect > lines causes the server to startup and function just fine. > > So I'm not quite sure what to do. I know I can get my entire system > working if I don't make the calls to Informix at startup (it appears > it's purely the connect that causes the error (whether it's a good > connect or not, I tried giving it a bogus password, and it still > crashes)), but well that's kind of a pain in the butt. > > So if anyone has ANY clues, it would be sincerely appreciated, as I need > sleep, and I also would love to get this working. > > Thanks a ton in advance. > > Greg > > > -- > Greg Rumple > [EMAIL PROTECTED]