Archived
1
0
Fork 0

Process.pm: catch errors in processes and log it

This commit is contained in:
Mercier Pierre-Olivier 2013-09-26 07:07:54 +02:00
parent 899fd189f5
commit 188650aeaf

View file

@ -62,10 +62,24 @@ sub do_work ($$$@)
my $sax_handler = ProcessHandler->new($args);
my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler );
eval {
$parser->parse_string(${ $_[0]{argref} });
}
if ($@) {
my $err = "Parse error: $@";
log ERROR, $err;
return $err;
}
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;
}