Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: panic: attempt to copy freed scalar a7b9650 to ad20598

by BrowserUk (Patriarch)
on Dec 03, 2009 at 16:47 UTC ( [id://810872]=note: print w/replies, xml ) Need Help??


in reply to panic: attempt to copy freed scalar a7b9650 to ad20598

Suggestion: In the real code, inside its equivalent of dave(), put

sub dave { die; ... }

Does that make the failure you are seeing occur?

What I'm getting at is does the attempt to copy freed only occur when dave() fails?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: panic: attempt to copy freed scalar a7b9650 to ad20598
by mje (Curate) on Dec 03, 2009 at 17:01 UTC

    The sample was not quite right. The sub "dave" is a generic sub which calls a procedure with DBD::Oracle. The call to "dave" in the example does fail but what is missing from the example is that the catch also may call "dave" but with a different procedure name. This is closer:

    use Try::Tiny; use Log::Log4perl qw(get_logger :levels); Log::Log4perl->init_and_watch('/etc/log4.conf', 60); my $log = get_logger('Q::S'); fred(); sub fred { my $x = try { # dave dies in the cases we get the panic dave('proc1', {}, 'arg1', 'arg2'); 0; } catch { my $ev = $_; if ($sometimes) { # sometimes goes this path and sometimes the + else eval { dave('proc2', {}, 'arg1', 'arg2'); 1; } or $log->warn("failed $@"); } else { $log->logwarn("test $_"); } 1; }; print "$x\n"; return if $x; # <---- this would be q.pl line 1895 } sub dave { # the following line would be DB.pm line 1380 my ($sth, $options, @args) = @_; }
      Re: trying to get a simple test case - After trying a simple die in dave(), try doing something simple in DBI, like selecting from a table that doesn't exist, with RaiseError set so that it dies. And with the variables scoped as closely as possible to that of your original program.

      What happens if you use "test $ev" instead?

        Not sure what you mean by that.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://810872]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (7)
As of 2024-04-23 18:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found