Fix interrupt handling

This commit is contained in:
Eelco Dolstra 2017-01-25 13:37:02 +01:00
parent 951357e5fb
commit 83ae6503e8
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
4 changed files with 41 additions and 13 deletions

View file

@ -1197,18 +1197,22 @@ static void signalHandlerThread(sigset_t set)
int signal = 0;
sigwait(&set, &signal);
if (signal == SIGINT || signal == SIGTERM || signal == SIGHUP) {
_isInterrupted = 1;
if (signal == SIGINT || signal == SIGTERM || signal == SIGHUP)
triggerInterrupt();
}
}
{
auto interruptCallbacks(_interruptCallbacks.lock());
for (auto & callback : *interruptCallbacks) {
try {
callback();
} catch (...) {
ignoreException();
}
}
void triggerInterrupt()
{
_isInterrupted = 1;
{
auto interruptCallbacks(_interruptCallbacks.lock());
for (auto & callback : *interruptCallbacks) {
try {
callback();
} catch (...) {
ignoreException();
}
}
}