Re: sigtrap disabled after DBI->connect

[email protected] (Steve Lynn)
Newsgroups perl.dbi.users
Organization http://groups.google.com
Message-ID <[email protected]>
On Mar 2, 2:30 am, [email protected] (Martin Evans) wrote:
> Lynn, Steve wrote:
> > All - I'm under Solaris using perl v. 5.8.3 and DBI v. 1.48.  I can catch signals w/o a problem before I connect to the database.
>
> > However after I connect, I can't catch signals anymore.  If I comment out the "DBI->connect" and press ctrl-c in a ReadLine(0), the signal is caught fine.
>
> > I found one other issue that seemed similar (http://www.mail-archive.com/[email protected]/msg07747.html).
>
> > Please help.
>
> > ###########################
>
> > #!/usr/local/perl -w
>
> > use strict;
>
> > use warnings;
>
> > use Term:ReadKey;
>
> > require DBI;
>
> > use sigtrap 'handler', \&SigExit, qw/HUP INT KILL/;
>
> > my $dbh;
>
> > my $response;
>
> > sub SigExit {
>
> >     print STDOUT "\nTest\n";
>
> >     die("\n");
>
> > }
>
> > $dbh = DBI->connect("DBI:Oracle:host=dbserver;sid=mydb;port=1521","scott","tiger")­;
>
> > print "\nEnter a response: ";
>
> > $response = ReadLine(0);
>
> > print ""\nEnter another response: ";
>
> > $response = ReadLine(0);
>
> > ###########################
>
> > Thanks,
>
> > Steve
>
> Oracle client libraries can trap some signals (including HUP) depending
> on which ones you use and how you are connecting. I believe you will
> need to set up your handlers after connect for those signals but I
> cannot remember the down side in Oracle.
>
> There have been various posts on dbi-users about this in the past so an
> archive of dbi-users (some can be found at dbi.perl.org) would probably
> list them.
>
> Martin
> --
> Martin J. Evans
> Easysoft Limitedhttp://www.easysoft.com- Hide quoted text -
>
> - Show quoted text -

Thanks Martin.

I'm not sure whether I was clear enough on my goal.  I'm trying to
trap INT signals so that when requesting input from the operator with
ReadLine, they can press ctrl-c and exit.  I don't like the default
signal handling so I'd like to just do a die("\n") when an INT is
received.

When I comment out the DBI->connect, a ctrl-c will exit from the
ReadLine as intended.  However, once the DBI->connect is completed,
and the operator presses ctrl-c within the ReadLine, '^C' appears, but
the signal handler isn't called.  It looks like the DBI->connect
cancels, disables or overrides my sigtrap.

I'm not trying to handle any signals from within DBI.  I just trying
to handle INT from within ReadLine.  It seems like DBI->connect is
canceling my signal handler.

I tried to reload sigtrap immediately after the DBI->connect but that
didn't work either:

#!/usr/local/perl -w

use strict;
use warnings;
use Term:ReadKey;
require DBI;

use sigtrap 'handler', \&SigExit, qw/HUP INT KILL/;

my $dbh;
my $response;

sub SigExit {
    print STDOUT "\nTest\n";
    die("\n");
}

$dbh = DBI-
>connect("DBI:Oracle:host=dbserver;sid=mydb;port=1521","scott","tiger")­;

use sigtrap 'handler', \&SigExit, qw/HUP INT KILL/;

print "\nEnter a response: ";
$response = ReadLine(0);

print ""\nEnter another response: ";
$response = ReadLine(0);

##################################

Any help would be appreciated,

Steve Lynn
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.