panic: DESTROY (dbih_clearcom) in trace output

panic: DESTROY (dbih_clearcom) in trace output

am 07.06.2007 21:53:56 von Martin.Evans

Hi,

I am trying to debug a rather nasty problem using DBD::Oracle and
enabled tracing with DBI_TRACE=10=x.x. As soon as I did this I get the
following on stderr. Unfortunately, the code is doing quite a bit at
this point (see below). As you will see I am using DBIx::Log4perl so I'm
quite prepared to believe the issue is there but I'm not sure what the
issue is.

SV = PVHV(0x8eb2ba0) at 0x8ebe35c
REFCNT = 0
FLAGS = (RMG,SHAREKEYS)
IV = 12
NV = 0
MAGIC = 0x8eb5be8
MG_VIRTUAL = 0
MG_TYPE = PERL_MAGIC_ext(~)
MG_FLAGS = 0x02
REFCOUNTED
MG_OBJ = 0x8ebe788
SV = PVMG(0x8de4280) at 0x8ebe788
REFCNT = 1
FLAGS = (OBJECT)
IV = 0
NV = 0
PV = 0x8ec5710 ""
CUR = 0
LEN = 220
STASH = 0x8e11fdc "DBD::Oracle::st_mem"
STASH = 0x83b3378 "DBIx::Log4perl::st"
ARRAY = 0x8eb5c28 (0:9, 1:4, 2:1, 3:2)
hash quality = 77.9%
KEYS = 12
FILL = 7
MAX = 15
RITER = -1
EITER = 0x0
(in cleanup) panic: DESTROY (dbih_clearcom) inner handle HASH is
not a h
ash ref at /usr/lib/perl5/site_perl/5.8.8/DBIx/Log4perl/db.pm line 55.

Line 55 in db.pm is the last line below:

sub do {
my ($dbh, @args) = @_;
my $h = $dbh->{private_DBIx_Log4perl};

$h->{Statement} = $args[0];
$dbh->_dbix_l4p_debug('do', @args)
if ($h->{logmask} & DBIX_L4P_LOG_INPUT);

my $affected = $dbh->SUPER::do(@args);

As far as I can see the code is doing one of the following dos:

do 'insert into xxx.job_audit (job_id, client_reference,
queued_date_time_utc, arguments, job_repost) values(?,?,utc_timestamp(),
substr(?, 0, 4000), ?)',undef, '450281',undef,' $VAR1 = {\'priority\' =>
1,\'jobid\' => \'450281\',\'args\' => {
},\'name\' => \'market_actions\',\'type\' => \'local\',\'jobflags\' =>
\'1\'};',undef];
affected: 1
do 'update xxx.job_audit set started_date_time_utc = utc_timestamp()
where job_id = ?',undef,'450281'];
affected: 1
do 'update xxx.job_audit set finished_date_time_utc = utc_timestamp(),
completion_status = ?, error_string = substr(?, 0, 500), job_repost =
(case when client_reference is null then null else ? end) where job_id
= ? -- run_queue',undef,0,undef,0,'450281'];
affected: 1

I can find in the following in dbih_inner

/* extra checks if being paranoid */
if (DBIS->debug && (!SvROK(hrv) || SvTYPE(SvRV(hrv)) != SVt_PVHV)) {
if (!what)
return NULL;
sv_dump(orv);
croak("panic: %s inner handle %s is not a hash ref",
what, neatsvpv(hrv,0));
}

but I'm not sure what it is croaking about. Is this something I need to
worry about?

Thanks.

Martin

Re: panic: DESTROY (dbih_clearcom) in trace output

am 08.06.2007 00:46:41 von Tim.Bunce

On Thu, Jun 07, 2007 at 08:53:56PM +0100, Martin J. Evans wrote:
> (in cleanup) panic: DESTROY (dbih_clearcom) inner handle HASH is not a hash ref at /usr/lib/perl5/site_perl/5.8.8/DBIx/Log4perl/db.pm line 55.

> I can find in the following in dbih_inner
>
> /* extra checks if being paranoid */
> if (DBIS->debug && (!SvROK(hrv) || SvTYPE(SvRV(hrv)) != SVt_PVHV)) {
> if (!what)
> return NULL;
> sv_dump(orv);
> croak("panic: %s inner handle %s is not a hash ref",
> what, neatsvpv(hrv,0));
> }
>
> but I'm not sure what it is croaking about. Is this something I need to
> worry about?

Nope. Upgrade your DBI.

This was fixed in r9395. The log comment was: "Remove old DBI internal
sanity check that's no longer valid (after spending a few hours banging
my head against it)"

:)

Tim.

Re: panic: DESTROY (dbih_clearcom) in trace output

am 08.06.2007 12:58:23 von Martin.Evans

Tim Bunce wrote:
> On Thu, Jun 07, 2007 at 08:53:56PM +0100, Martin J. Evans wrote:
>> (in cleanup) panic: DESTROY (dbih_clearcom) inner handle HASH is not a hash ref at /usr/lib/perl5/site_perl/5.8.8/DBIx/Log4perl/db.pm line 55.
>
>> I can find in the following in dbih_inner
>>
>> /* extra checks if being paranoid */
>> if (DBIS->debug && (!SvROK(hrv) || SvTYPE(SvRV(hrv)) != SVt_PVHV)) {
>> if (!what)
>> return NULL;
>> sv_dump(orv);
>> croak("panic: %s inner handle %s is not a hash ref",
>> what, neatsvpv(hrv,0));
>> }
>>
>> but I'm not sure what it is croaking about. Is this something I need to
>> worry about?
>
> Nope. Upgrade your DBI.
>
> This was fixed in r9395. The log comment was: "Remove old DBI internal
> sanity check that's no longer valid (after spending a few hours banging
> my head against it)"

Thanks - that did the trick. Would you mind if I changed DBI::Changes to
mention this in case others hit it?

Martin

Re: panic: DESTROY (dbih_clearcom) in trace output

am 08.06.2007 16:08:05 von Tim.Bunce

On Fri, Jun 08, 2007 at 11:58:23AM +0100, Martin Evans wrote:
> Tim Bunce wrote:
> >On Thu, Jun 07, 2007 at 08:53:56PM +0100, Martin J. Evans wrote:
> >> (in cleanup) panic: DESTROY (dbih_clearcom) inner handle HASH is
> >> not a hash ref at
> >> /usr/lib/perl5/site_perl/5.8.8/DBIx/Log4perl/db.pm line 55.
> >
> >>I can find in the following in dbih_inner
> >>
> >> /* extra checks if being paranoid */
> >> if (DBIS->debug && (!SvROK(hrv) || SvTYPE(SvRV(hrv)) != SVt_PVHV)) {
> >> if (!what)
> >> return NULL;
> >> sv_dump(orv);
> >> croak("panic: %s inner handle %s is not a hash ref",
> >> what, neatsvpv(hrv,0));
> >> }
> >>
> >>but I'm not sure what it is croaking about. Is this something I need to
> >>worry about?
> >
> >Nope. Upgrade your DBI.
> >
> >This was fixed in r9395. The log comment was: "Remove old DBI internal
> >sanity check that's no longer valid (after spending a few hours banging
> >my head against it)"
>
> Thanks - that did the trick. Would you mind if I changed DBI::Changes to
> mention this in case others hit it?

Go ahead. Thanks.

Tim.