Skip to content
Commit f2338c8f authored by Marek Chalupa's avatar Marek Chalupa Committed by Pekka Paalanen
Browse files

event-loop: make signalfd non-blocking



When we add more that one source to a signal, then wayland will
block in wl_event_loop_dispatch. This is due to the attampt to read
from signal's fd each time the source is dispatched.

  wl_event_loop_add_signal(loop, SIGINT, ...);
  wl_event_loop_add_signal(loop, SIGINT, ...);

  /* raise signal .. */

  /* we got two fd's ready, both for the one SIGINT */
  epoll_wait(...) = 2

  [ for (i == 0) ]
      source1->dispatch() --> read(fd1);
  [ for (i == 1) ]
      source2->dispatch() --> read(fd2); /* blocking! */

Reading from fd2 will block, because we got only one signal,
and it was read from fd1.

Signed-off-by: default avatarMarek Chalupa <mchqwerty@gmail.com>
Reviewed-by: default avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
parent 5504c933
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment