On 5/9/07, Jeremy Kister <[EMAIL PROTECTED]> wrote:
On 5/9/2007 12:01 AM, Jeff Pang wrote:
> 1) too less timeout setting in my.cnf? see /etc/my.cnf and look for this line:

I actually have no my.cnf.  But if I s/my $pid = fork()/my $pid=1/ all
works fine, even with 60 second sleeps.

> 2) as we know,child exiting would return a SIGCHLD signal to parent,maybe this
> break the dbh connection?try to add these 2 lines in parent code:
>
> use POSIX qw(:signal_h WNOHANG);
> $SIG{CHLD}=sub {while((my $child=waitpid(-1,WNOHANG))>0){}};

Nope, same problem.

Thanks,

--

Jeremy Kister
http://jeremy.kister.net./

It looks like it has something to do with $dbh going out of scope
(when the child exits).  You can see the behavior by first adding
"sleep 10;" to the child (the handle doesn't die for 10 seconds) and
then adding "$dbh = undef" to the child before the sleep (the handle
dies as soon as it is set to undef).  It is a hack, but so long as you
are using the AutoCommit attribute (on by default) you can also use
the mysql_auto_reconnect attribute.  Change


my $dbh = DBI->connect($dsn, $dbun, $dbpw, {RaiseError => 1});

to

my $dbh = DBI->connect(
   $dsn, $dbun, $dbpw,
   {
       RaiseError => 1,
       mysql_auto_reconnect => 1
   }
);

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to