On Wed, Mar 27, 2013 at 10:38:53PM +0100, Peter Maatman wrote: > --- > src/compositor.c | 29 ++++++++++++++++++----------- > 1 file changed, 18 insertions(+), 11 deletions(-)
I added the void in catch_signal() as Giulio mentioned, other than that it all looks good. Thanks, and thanks Giulio for reviewing. Kristian > diff --git a/src/compositor.c b/src/compositor.c > index a2860fd..e750cbe 100644 > --- a/src/compositor.c > +++ b/src/compositor.c > @@ -3221,17 +3221,17 @@ print_backtrace(void) > #endif > > static void > -on_segv_signal(int s, siginfo_t *siginfo, void *context) > +on_caught_signal(int s, siginfo_t *siginfo, void *context) > { > - /* This SIGSEGV handler will do a best-effort backtrace, and > + /* This signal handler will do a best-effort backtrace, and > * then call the backend restore function, which will switch > * back to the vt we launched from or ungrab X etc and then > * raise SIGTRAP. If we run weston under gdb from X or a > - * different vt, and tell gdb "handle SIGSEGV nostop", this > + * different vt, and tell gdb "handle *s* nostop", this > * will allow weston to switch back to gdb on crash and then > - * gdb will catch the crash with SIGTRAP. */ > + * gdb will catch the crash with SIGTRAP.*/ > > - weston_log("caught segv\n"); > + weston_log("caught signal: %d\n", s); > > print_backtrace(); > > @@ -3240,7 +3240,6 @@ on_segv_signal(int s, siginfo_t *siginfo, void *context) > raise(SIGTRAP); > } > > - > static void * > load_module(const char *name, const char *entrypoint) > { > @@ -3393,6 +3392,18 @@ usage(int error_code) > exit(error_code); > } > > +static void > +catch_signals() > +{ > + struct sigaction action; > + > + action.sa_flags = SA_SIGINFO | SA_RESETHAND; > + action.sa_sigaction = on_caught_signal; > + sigemptyset(&action.sa_mask); > + sigaction(SIGSEGV, &action, NULL); > + sigaction(SIGABRT, &action, NULL); > +} > + > int main(int argc, char *argv[]) > { > int ret = EXIT_SUCCESS; > @@ -3400,7 +3411,6 @@ int main(int argc, char *argv[]) > struct weston_compositor *ec; > struct wl_event_source *signals[4]; > struct wl_event_loop *loop; > - struct sigaction segv_action; > struct weston_compositor > *(*backend_init)(struct wl_display *display, > int *argc, char *argv[], const char > *config_file); > @@ -3491,10 +3501,7 @@ int main(int argc, char *argv[]) > exit(EXIT_FAILURE); > } > > - segv_action.sa_flags = SA_SIGINFO | SA_RESETHAND; > - segv_action.sa_sigaction = on_segv_signal; > - sigemptyset(&segv_action.sa_mask); > - sigaction(SIGSEGV, &segv_action, NULL); > + catch_signals(); > segv_compositor = ec; > > ec->option_idle_time = idle_time; > -- > 1.8.2 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel