compositor: return failure even if SEGV handler works v2

Weston has a SIGSEGV handler that attempts to shut everything down
cleanly. If it actually succeeds in that, the process exit status will
indicate success, when the process just segfaulted.

Fix that by setting the return value to failure in the SEGV handler.

v2: use a local instead of a global variable

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
Pekka Paalanen 12 years ago committed by Kristian Høgsberg
parent 1e51a87f13
commit 3ab7269a9b
  1. 5
      src/compositor.c

@ -3090,6 +3090,7 @@ static const char xdg_error_message[] =
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int ret = EXIT_SUCCESS;
struct wl_display *display; struct wl_display *display;
struct weston_compositor *ec; struct weston_compositor *ec;
struct wl_event_source *signals[4]; struct wl_event_source *signals[4];
@ -3217,6 +3218,8 @@ int main(int argc, char *argv[])
weston_compositor_wake(ec); weston_compositor_wake(ec);
if (setjmp(segv_jmp_buf) == 0) if (setjmp(segv_jmp_buf) == 0)
wl_display_run(display); wl_display_run(display);
else
ret = EXIT_FAILURE;
/* prevent further rendering while shutting down */ /* prevent further rendering while shutting down */
ec->state = WESTON_COMPOSITOR_SLEEPING; ec->state = WESTON_COMPOSITOR_SLEEPING;
@ -3234,5 +3237,5 @@ int main(int argc, char *argv[])
ec->destroy(ec); ec->destroy(ec);
wl_display_destroy(display); wl_display_destroy(display);
return 0; return ret;
} }

Loading…
Cancel
Save