Skip to content

Commit

Permalink
Signal catching to force atexit handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Apr 26, 2014
1 parent 81569b6 commit b5afb5b
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions 1pass.c
Expand Up @@ -7,6 +7,7 @@
#include <errno.h>
#include <unistd.h>
#include <dirent.h>
#include <signal.h>

#include "lua.h"
#include "lauxlib.h"
Expand Down Expand Up @@ -585,8 +586,46 @@ static int initLua(const int argc, char **argv)
} // initLua


static void deinitAll()
{
deinitPowermate();
deinitKeyHook();
deinitLua();
} // deinitAll


static void killerSignalCatcher(int sig)
{
static int been_run = 0;
if (been_run)
{
fprintf(stderr, "Caught signal %d, terminating HARD.\n", sig);
_exit(0);
} // if

been_run = 1;
fprintf(stderr, "Caught signal %d, terminating.\n", sig);
exit(0); // trigger atexit handlers.
} // killerSignalCatcher


static void initSignals(void)
{
signal(SIGINT, killerSignalCatcher);
signal(SIGQUIT, killerSignalCatcher);
signal(SIGILL, killerSignalCatcher);
signal(SIGFPE, killerSignalCatcher);
signal(SIGTERM, killerSignalCatcher);
signal(SIGPIPE, killerSignalCatcher);
signal(SIGSEGV, killerSignalCatcher);
signal(SIGABRT, killerSignalCatcher);
signal(SIGHUP, killerSignalCatcher);
} // initSignals


int main(int argc, char **argv)
{
initSignals();
initPowermate(&argc, argv);
gtk_init(&argc, &argv);

Expand Down

0 comments on commit b5afb5b

Please sign in to comment.