weston-launch: return better value if weston dies because of a signal
Before this commit, weston-launch returned 0 if weston was killed by a signal. This makes it hard to automatically test weston by using weston-launch, as there is no way to know why weston was terminated. This commit makes weston-launch return 10+N instead, where N is the code of the signal that terminated weston. 10 was chosen because it allows a script to distinguish it from the case that weston-launch itself was killed by a signal (128+N), and does not overlap the standard exit codes defined in sysexits.h. Partial fix for https://bugs.freedesktop.org/show_bug.cgi?id=60935. I can't reproduce the SIGHUP using the fbdev backend. v3: better commit message.
This commit is contained in:
committed by
Kristian Høgsberg
parent
ff253129c5
commit
7a3ec74cb6
+14
-2
@@ -420,7 +420,7 @@ static int
|
||||
handle_signal(struct weston_launch *wl)
|
||||
{
|
||||
struct signalfd_siginfo sig;
|
||||
int pid, status;
|
||||
int pid, status, ret;
|
||||
|
||||
if (read(wl->signalfd, &sig, sizeof sig) != sizeof sig) {
|
||||
error(0, errno, "reading signalfd failed");
|
||||
@@ -432,7 +432,19 @@ handle_signal(struct weston_launch *wl)
|
||||
pid = waitpid(-1, &status, 0);
|
||||
if (pid == wl->child) {
|
||||
wl->child = 0;
|
||||
quit(wl, WIFEXITED(status) ? WEXITSTATUS(status) : 0);
|
||||
if (WIFEXITED(status))
|
||||
ret = WEXITSTATUS(status);
|
||||
else if (WIFSIGNALED(status))
|
||||
/*
|
||||
* If weston dies because of signal N, we
|
||||
* return 10+N. This is distinct from
|
||||
* weston-launch dying because of a signal
|
||||
* (128+N).
|
||||
*/
|
||||
ret = 10 + WTERMSIG(status);
|
||||
else
|
||||
ret = 0;
|
||||
quit(wl, ret);
|
||||
}
|
||||
break;
|
||||
case SIGTERM:
|
||||
|
||||
Reference in New Issue
Block a user