--- xlock/xlock.c 2011-05-24 03:53:46.000000000 +0200 +++ xlock/xlock.c 2012-11-19 12:47:42.592261929 +0100 @@ -1052,6 +1052,7 @@ syslogStop(char *displayName) #endif char error_buf[ERROR_BUF]; +static int error_exitcode = 1; void error(const char *buf) @@ -1068,7 +1069,14 @@ error(const char *buf) #else (void) fprintf(stderr, "%s", buf); #endif - exit(1); + if (error_exitcode < 0) { + int sig = -error_exitcode; + signal(sig, SIG_DFL); + raise(sig); + /* We are still alive?? */ + error_exitcode = sig + 128; + } + exit(error_exitcode); } /* Server access control support. */ @@ -2946,6 +2954,7 @@ sigcatch(int signum) ProgramName: DEFAULT_NAME, signum, (strlen(ProgramName) + strlen(name) < ERROR_BUF - 2 * ERROR_LINE) ? name: "?", (long) getuid()); + error_exitcode = -signum; error(error_buf); #endif /* !WIN32 */ }