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.
Philipp Brüschweiler 12 years ago committed by Kristian Høgsberg
parent ff253129c5
commit 7a3ec74cb6
  1. 16
      src/weston-launch.c

@ -420,7 +420,7 @@ static int
handle_signal(struct weston_launch *wl) handle_signal(struct weston_launch *wl)
{ {
struct signalfd_siginfo sig; struct signalfd_siginfo sig;
int pid, status; int pid, status, ret;
if (read(wl->signalfd, &sig, sizeof sig) != sizeof sig) { if (read(wl->signalfd, &sig, sizeof sig) != sizeof sig) {
error(0, errno, "reading signalfd failed"); error(0, errno, "reading signalfd failed");
@ -432,7 +432,19 @@ handle_signal(struct weston_launch *wl)
pid = waitpid(-1, &status, 0); pid = waitpid(-1, &status, 0);
if (pid == wl->child) { if (pid == wl->child) {
wl->child = 0; 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; break;
case SIGTERM: case SIGTERM:

Loading…
Cancel
Save