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