- my $sth = dbh->prepare($ssql) or die $DBI::errstr; #better recovery?
- $sth->execute($serviceid, $serviceid) or die $sth->errstr;
+ my $sth = dbh->prepare($ssql) or die $DBI::errstr; #better recovery here?
+
+ warn "executing search\n" if $DEBUG;
+
+ eval {
+ my $h = set_sig_handler( 'ALRM', sub { die "_timeout\n"; } );
+ alarm(10*60); #5*60); #$torrus_srvderive->last_srv_date ? 5*60 : 15*60);
+ $sth->execute($serviceid, $serviceid) or die $sth->errstr;
+ alarm(0);
+ };
+ alarm(0);
+
+ if ( $@ && $@ eq "_timeout\n" ) {
+ warn "search timed out; reconnecting and restarting\n";
+ dbh->clone()->do("KILL QUERY ". dbh->{"mysql_thread_id"})
+ if driver_name eq 'mysql';
+ dbh->rollback; #or die dbh->errstr;
+ adminsuidsetup($user);
+ next SERVICEID; #MAIN;
+ } elsif ( $@ ) {
+ die $@;
+ }
+
+ warn "search executed; checking results\n" if $DEBUG;