My setup is apache/modperl+Apache::DBI with MySQL driver. On server startup in every 
httpd child a few queries that are executed very often are prepared. When the 
Apache::Registry scripts run values are bound to the cursors and they are executed. 
The server runs ok for 6-10 hours and then I'm seeing these messages in the error_log 
when trying to execute the cursors 

[modperl] caught SIGPIPE in process 12620
    hint: may be a client (browser) hit STOP?

My initial guess was that the mysql daemon of the cursor has exitted, so I had the 
library recompiled by having all apache children execute a "do 'db.pl'" using a custom 
USR2 handler. Take a look at the file below: I think that the db connection and the 
cursor should have been reinitialized, but the SIGPPIPE remained. Now my guess is that 
Apache::DBI gets confused somehow... To stop the problem I added a $SIG{PIPE} = sub {} 
into the code, which works well, but isn't this going to cause other problems with 
mod_perl ?

apache          1.3.12
mod_per         1.23
perl            5.005_03
Apache::DBI     0.87
DBI             1.14

Any help would be greatly appreciated.

Thanks,

-Balazs

ps: The library looks something like this:

#db.pl
$DBH = &connect();
$CURSOR = $DBH->prepare("some sql");

sub routine {
    $CURSOR->bind_param(1, "$_[0]");
    $SUSPECTS_CUR->execute();
    .
    .
}

Reply via email to