You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Christopher Lee <ch...@balliol.oxford.ac.uk> on 2000/10/14 23:14:01 UTC

undefined subroutine.....called at /dev/null line 21

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
<Location /b>	
	SetHandler perl-script
	perlhandler BV
</Location>
<Location /login>
	SetHandler perl-script
	perlhandler BV::Login
</Location>
<Location /loginscreen>
	SetHandler perl-script
	perlhandler BV::LoginScreen
</Location>
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