Process.pm: catch errors in processes and log it
This commit is contained in:
parent
899fd189f5
commit
188650aeaf
1 changed files with 29 additions and 5 deletions
|
@ -62,9 +62,23 @@ sub do_work ($$$@)
|
|||
my $sax_handler = ProcessHandler->new($args);
|
||||
my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler );
|
||||
|
||||
$parser->parse_string(${ $_[0]{argref} });
|
||||
eval {
|
||||
$parser->parse_string(${ $_[0]{argref} });
|
||||
}
|
||||
if ($@) {
|
||||
my $err = "Parse error: $@";
|
||||
log ERROR, $err;
|
||||
return $err;
|
||||
}
|
||||
|
||||
return $subref->($given_args, $args);
|
||||
eval {
|
||||
return $subref->($given_args, $args);
|
||||
}
|
||||
if ($@) {
|
||||
my $err = $@;
|
||||
log ERROR, $err;
|
||||
return $err;
|
||||
}
|
||||
}
|
||||
|
||||
sub register_no_parse ($$;$)
|
||||
|
@ -76,13 +90,23 @@ sub register_no_parse ($$;$)
|
|||
my $worker = Gearman::Worker->new;
|
||||
|
||||
$worker->job_servers('gearmand:4730');
|
||||
$worker->register_function($funcname => sub { return $subref->($given_arg, $_[0]{argref}); });
|
||||
$worker->register_function($funcname => sub
|
||||
{
|
||||
eval {
|
||||
return $subref->($given_arg, $_[0]{argref});
|
||||
}
|
||||
if ($@) {
|
||||
my $err = $@;
|
||||
log ERROR, $err;
|
||||
return $err;
|
||||
}
|
||||
});
|
||||
|
||||
# Disable exit on warning or error
|
||||
$ACU::Log::fatal_warn = 0;
|
||||
$ACU::Log::fatal_error = 0;
|
||||
|
||||
log DEBUG, "$funcname registered";
|
||||
log INFO, "$funcname registered";
|
||||
|
||||
$worker->work while 1;
|
||||
}
|
||||
|
@ -103,7 +127,7 @@ sub register ($$;$$)
|
|||
$ACU::Log::fatal_warn = 0;
|
||||
$ACU::Log::fatal_error = 0;
|
||||
|
||||
log DEBUG, "$funcname registered";
|
||||
log INFO, "$funcname registered";
|
||||
|
||||
$worker->work while 1;
|
||||
}
|
||||
|
|
Reference in a new issue