Hi,

Can someone help me out here?

Apache_1.3.12
mod_perl 1.21_03
Apache-Session-1.03 ( Database and deamon locker for storing and locking
sessions )

-- code snippet --
sub getSESSION {
        my $self = shift;
        my $sid = shift;
        my %SESSION;
        eval {tie %SESSION, 'Apache::Session::DBI', $sid;} if ($sid);
        if (! $sid || $@ ) {
                eval {tie %SESSION, 'Apache::Session::DBI', undef;};
        }
        return \%SESSION;
}

So if I pass what I know to be a bogus non-null session id (no longer a
valid id in the database) it tries the first eval. Based on my understanding
of the Apache::Session docs, it should die (shouldn't it?), which should
result in $@ being non-null and the first eval should return undef. Then I
should be able to call another eval block requesting a new session.

Is this right and if so, why am I getting the following messages in the log
file?

panic: POPSTACK
Callback called exit.

for each httpd process.

I looked at the eval documentation and I've tried using Carp, localizing
$SIG{__DIE__) within the eval, but at this point I'm utterly confused and am
not sure what is really the cause of the problem.  I think that it has
something to do with the way perl's die function is being called within this
eval because I don't have this problem when the session id I pass is a valid
one.

Help.

thank you,
Sang

Reply via email to