Bugfix: Unhandled exception in Service::CheckTimerHandler.

Fixes #3607
This commit is contained in:
Gunnar Beutner 2013-02-01 19:27:36 +01:00
parent 05d0dc5683
commit 5492d6fac3
2 changed files with 20 additions and 7 deletions

View File

@ -105,7 +105,11 @@ void CheckerComponent::CheckTimerHandler(void)
m_IdleServices.erase(service);
m_PendingServices.insert(service);
try {
service->BeginExecuteCheck(boost::bind(&CheckerComponent::CheckCompletedHandler, this, service));
} catch (const exception& ex) {
Logger::Write(LogCritical, "checker", "Exception occured while checking service '" + service->GetName() + "': " + ex.what());
}
tasks++;
}

View File

@ -682,13 +682,22 @@ void Service::BeginExecuteCheck(const function<void (void)>& callback)
scheduleInfo->Set("schedule_start", GetNextCheck());
scheduleInfo->Set("execution_start", Utility::GetTime());
try {
vector<Value> arguments;
arguments.push_back(static_cast<Service::Ptr>(GetSelf()));
ScriptTask::Ptr task;
task = InvokeMethod("check", arguments, boost::bind(&Service::CheckCompletedHandler, this, scheduleInfo, _1, callback));
assert(task); /* TODO: gracefully handle missing methods */
Set("current_task", task);
} catch (...) {
/* something went wrong while setting up the method call -
* reschedule the service and call the callback anyway. */
UpdateNextCheck();
callback();
throw;
}
}
void Service::CheckCompletedHandler(const Dictionary::Ptr& scheduleInfo,