-----Original Message-----
>From: Chas Owens <[EMAIL PROTECTED]>
>Sent: May 10, 2007 12:02 AM
>To: Jeff Pang <[EMAIL PROTECTED]>
>Cc: beginners-list <beginners@perl.org>
>Subject: Re: forking problem with dbd::mysql
>
>On 5/9/07, Jeff Pang <[EMAIL PROTECTED]> wrote:
>snip
>> But still has a question for me.We may see this similiar destroy method on 
>> DBI class,
>>
>> sub DESTROY
>> {
>>     my $self = shift;
>>     my $dbh = $self->{'dbh'};
>>     if ($dbh) {
>>         local $SIG{'__WARN__'} = sub {};
>>         $dbh->disconnect();
>>     }
>> }
>>
>> Ok where in child when going out of scope the $dbh should get disconnected.
>> But why this would affect the $dbh in parent?As we know,when forking child 
>> get a
>> full copy of $dbh from parent and it's separate to parent's $dbh.
>snip
>
>But the connection information in the $dbh is the same, so when the
>child disconnects it tells the MySQL server to destroy the connection.
> This means that the parent loses its connection unexpectedly.


Yes but I think is this maybe a bug in DBI class?For example,open a file handle 
and after forking child close that handle,this would not affect parent's handle.
The codes below show the case,

use strict;
use warnings;

open HDW,">","test.txt" or die;
select HDW;$|++;select STDOUT;
my $pid = fork;
die "can't fork" unless defined $pid;

unless ($pid) {
    for (1..10) {
        print HDW "child $_\n";
        sleep 1;
     }
    exit 0;

} else {
    for (1..100) {
        print HDW "parent $_\n";
        sleep 1;
     }
}

__END__

parent would continue to write till end at 100.


--
mailto:[EMAIL PROTECTED]
http://home.arcor.de/jeffpang/

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


Reply via email to