Hi,
Im running apache1.3.12/modperl1.24 (static compiled) on redhat6 and I'm
getting some strange errors like above, I also get:
-
Database handler destroyed withouth explicit disconnect at /dev/null line 21
-
and I get both errors without the /dev/null bit on the end!
I'm sure this bug is in my perl code, but (you saw that coming, right? :)
I only get this bug either
1. on every other restart of httpd, sometimes depending on the first url
requested
or 2. every other request to the same url
or 3. for the first X calls to the server then every other request!
all three server_errors occur with the same code, which confuses me
more than the /dev/null error. I'm thinking this is a config error, but I have
no idea why...
The config and code...(abridged version, the full version can be
temporarily found at http://compsoc.net/~chris/modperl.html if necessary)
ServerType standalone
ServerRoot "/usr/local/apache"
Timeout 30
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 1
MaxSpareServers 20
StartServers 1
MaxClients 40
MaxRequestsPerChild 100
PerlRequire conf/BV.pl
SetHandler perl-script
perlhandler BV
SetHandler perl-script
perlhandler BV::Login
SetHandler perl-script
perlhandler BV::LoginScreen
DocumentRoot /home/chris/system/public_html
--
package BV;
use Apache::Constants qw/:common/;
use BV::Config;
use BV::Common;
use DBI;
use strict;
use vars qw($BV_CONF);
sub handler {
my $r=shift;
if (!$r)
{
Apache->error("undefined request passed to BV::handler");
return OK;
}
my $V=bless {r=>$r},"BV";
my @args;
($V->{Location}, $V->{Handler}, $V->{Username}, $V->{UrlSession}, $V->{Command},@args)
= split(m(/),$r->path_info);
$V->{args}=\@args;
if($V->{Handler} eq "kill")
{
$V->kill_login($V->{UrlSession});
return OK;
}
$V->{UrlPrefix}=$BV_CONF->{DomainName}.
$BV_CONF->{Location}.
$BV_CONF->{Handler};
$V->{UrlPrefix}.=$V->{Username};
$V->{ip}=$r->connection->remote_ip;
$V->{Session}=check_cookie($V->{r});
($V->{dbh}=DBI->connect($BV_CONF->{DatabaseName},$BV_CONF->{DatabaseUser},$BV_CONF->{DatabasePass}))
or return undef;
if(!defined($V->{Session}))
{
$V->{Session}=$V->{UrlSession};
$V->{UrlPrefix}=$V->{Session};
}
else {$V->{UrlPrefix}.="x"; }
if($V->{Command} eq "session")
{return redirect($V->{r},"$V->{UrlPrefix}"."/top"); }
dont_cache($r,"text/html");
$V->{r}->print("test test test");
$V->{dbh}->disconnect;
return OK;
}
sub kill_login{
my ($V,$s) = @_;
my $u=$V->{Username};
my $dbh;
if(!($dbh=DBI->connect($BV_CONF->{DatabaseName},$BV_CONF->{DatabaseUser},$BV_CONF->{DatabasePass})))
{
Log("No handle in kill_login");
return undef;
}
$dbh->do("DELETE FROM sessions WHERE username='$u' AND session_id='$s'");
Log("DELETE FROM sessions WHERE username=$u AND session_id=$s");
$dbh->disconnect;
redirect($V->{r},"$BV_CONF->{DomainName}$BV_CONF->{LoginScreenUrl}");
}
1;
There is more but I'll spare you the download just in case...
please help.I'm going mad...
--
Christopher Lee.
http://compsoc.net/~chris