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

@ -97,6 +97,9 @@ static void opensslLockCallback(int mode, int type, const char * file, int line)
}
static void sigHandler(int signo) { }
void initNix()
{
/* Turn on buffering for cerr. */
@ -130,6 +133,10 @@ void initNix()
if (sigaction(SIGCHLD, &act, 0))
throw SysError("resetting SIGCHLD");
/* Install a dummy SIGUSR1 handler for use with pthread_kill(). */
act.sa_handler = sigHandler;
if (sigaction(SIGUSR1, &act, 0)) throw SysError("handling SIGUSR1");
/* Register a SIGSEGV handler to detect stack overflows. */
detectStackOverflow();
@ -253,6 +260,8 @@ void showManPage(const string & name)
int handleExceptions(const string & programName, std::function<void()> fun)
{
ReceiveInterrupts receiveInterrupts; // FIXME: need better place for this
string error = ANSI_RED "error:" ANSI_NORMAL " ";
try {
try {