diff options
Diffstat (limited to 'FS/bin/freeside-queued')
-rw-r--r-- | FS/bin/freeside-queued | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index e97a52cab..d5d84cced 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -107,12 +107,20 @@ while (1) { $hashref->{'secure'} = ''; } - my @jobs = qsearch({ - 'table' => 'queue', - 'hashref' => $hashref, - 'extra_sql' => $nodepend, - 'order_by' => $order_by, - }); + #qsearch dies when the db goes away + my @jobs = eval { + qsearch({ + 'table' => 'queue', + 'hashref' => $hashref, + 'extra_sql' => $nodepend, + 'order_by' => $order_by, + }); + }; + if ( $@ ) { + warn "WARNING: error searching for jobs, closing connection: $@"; + undef $FS::UID::dbh; + next; + } unless ( @jobs ) { dbh->commit or do { @@ -145,7 +153,12 @@ while (1) { $FS::UID::AutoCommit = 1; - my @args = $ljob->args; + my @args = eval { $ljob->args; }; + if ( $@ ) { + warn "WARNING: error retrieving job arguments, closing connection: $@"; + undef $FS::UID::dbh; + next; + } splice @args, 0, 1, $ljob if $args[0] eq '_JOB'; defined( my $pid = fork ) or do { @@ -155,7 +168,7 @@ while (1) { $hash{'statustext'} = "[freeside-queued] can't fork: $!"; my $ljob = new FS::queue ( \%hash ); my $error = $ljob->replace($job); - die $error if $error; + die $error if $error; #XXX still dying if we can't fork AND we can't connect to the db next; #don't increment the kid counter }; |