Andrei A. Voropaev wrote:

> Hi!
> 
> In the code for DBD::Oracle::db::ping method there are lines 
> 
>     local $SIG{__DIE__};
>     local $SIG{__WARN__};
> 
> As I understand these lines don't do anything though I guess they are supposed
> to suppress warning messages and possibly 'die' messages. Currently everytime
> when ping fails and we have PrintError => 1 then the message goes into Apache error
> log. What is worse if $dbh was disconnected then ping dies and kills the whole
> process. As temporary fix we can user $dbh->{RaiseError} = 0, but then we'd
> have to rewrite the code that was placed into eval blocks.
> 
> Is this a feature or something that should be fixed? Was it supposed to be 
> 
>    local $SIG{__WARN__} = sub {};

That simply means that any die/warn handlers that the running code may 
have set, are unset in the given scope. Therefore if there code wants to 
print a warning or the code die()'s, the *default* handler will be used.

I think this is mostly used for protection from user-defined sighadler 
which may have an ill-effect during eval {} blocks. See
http://perl.apache.org/guide/perl.html#Exception_Handling_for_mod_perl

I'm not familiar with DBD::Oracle, but you may need to run the faulty 
code in the eval {} block to prevent die-ing.



_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:[EMAIL PROTECTED]  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/

Reply via email to