feat(SingleApplication): don't touch sockets when SIGABRT, SIGBUS or SIGSEGV is handled

This commit is contained in:
Ronan Abhamon 2018-01-26 11:45:53 +01:00
parent c850958987
commit 9cf08623e3

View file

@ -256,11 +256,21 @@ void SingleApplicationPrivate::connectToPrimary (int msecs, char connectionType)
return;
}
// Dangerous signals. Exit directly after shared memory destruction.
// Don't touch sockets => avoid dead locks.
for (int crashSig : { SIGABRT, SIGBUS, SIGSEGV })
if (signum == crashSig) {
for (SingleApplicationPrivate *d : sharedMem)
delete d->memory;
goto forceExit;
}
while (!sharedMem.empty()) {
delete sharedMem.back();
sharedMem.pop_back();
}
forceExit:
::exit(128 + signum);
}