On Thu, Jan 08, 2015 at 10:55:30AM +0800, Jonas Ådahl wrote:
> On Thu, Jan 08, 2015 at 10:05:34AM +1000, Peter Hutterer wrote:
> > Under gdb, signalfd will still deliver the signal when gdb itself is
> > interrupted and quit event-debug. For a debugging tool, that's not optimal.
> > Switch to a normal signal handler instead, signalfd is overkill here anyway.
> > 
> > Signed-off-by: Peter Hutterer <[email protected]>
> > ---
> >  tools/event-debug.c | 37 +++++++++++++++++--------------------
> >  1 file changed, 17 insertions(+), 20 deletions(-)
> > 
> > diff --git a/tools/event-debug.c b/tools/event-debug.c
> > index c567550..a57d914 100644
> > --- a/tools/event-debug.c
> > +++ b/tools/event-debug.c
> > @@ -42,6 +42,7 @@ uint32_t start_time;
> >  static const uint32_t screen_width = 100;
> >  static const uint32_t screen_height = 100;
> >  struct tools_options options;
> > +unsigned int stop;
> 
> Should be static. Initialize for clarity?
> 
> >  
> >  static int
> >  open_restricted(const char *path, int flags, void *user_data)
> > @@ -331,24 +332,26 @@ handle_and_print_events(struct libinput *li)
> >  }
> >  
> >  static void
> > +sighandler(int signal, siginfo_t *siginfo, void *userdata)
> > +{
> > +   stop = 1;
> > +}
> > +
> > +static void
> >  mainloop(struct libinput *li)
> >  {
> > -   struct pollfd fds[2];
> > -   sigset_t mask;
> > +   struct pollfd fds;
> > +   struct sigaction act;
> >  
> > -   fds[0].fd = libinput_get_fd(li);
> > -   fds[0].events = POLLIN;
> > -   fds[0].revents = 0;
> > +   fds.fd = libinput_get_fd(li);
> > +   fds.events = POLLIN;
> > +   fds.revents = 0;
> >  
> > -   sigemptyset(&mask);
> > -   sigaddset(&mask, SIGINT);
> > +   memset(&act, 0, sizeof(act));
> > +   act.sa_sigaction = sighandler;
> > +   act.sa_flags = SA_SIGINFO;
> >  
> > -   fds[1].fd = signalfd(-1, &mask, SFD_NONBLOCK);
> > -   fds[1].events = POLLIN;
> > -   fds[1].revents = 0;
> > -
> > -   if (fds[1].fd == -1 ||
> > -       sigprocmask(SIG_BLOCK, &mask, NULL) == -1) {
> > +   if (sigaction(SIGINT, &act, NULL) == -1) {
> >             fprintf(stderr, "Failed to set up signal handling (%s)\n",
> >                             strerror(errno));
> >             return;
> > @@ -359,14 +362,8 @@ mainloop(struct libinput *li)
> >             fprintf(stderr, "Expected device added events on startup but 
> > got none. "
> >                             "Maybe you don't have the right 
> > permissions?\n");
> >  
> > -   while (poll(fds, 2, -1) > -1) {
> > -           if (fds[1].revents)
> > -                   break;
> > -
> > +   while (!stop && poll(&fds, 1, -1) > -1)
> >             handle_and_print_events(li);
> > -   }
> > -
> > -   close(fds[1].fd);
> >  }
> >  
> >  int
> > -- 
> > 2.1.0
> 
> Can remove the #include <signalfd.h> now as well I suppose.
> 
> With those two fixed, consider this patch Reviewed-by: Jonas Ådahl
> <[email protected]>

both fixed, thanks.

Cheers,
   Peter
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to