On 18 August 2014 12:23, Marek Chalupa <mchqwe...@gmail.com> wrote: > Hi, > > thanks for reviewing. > > The failure you got is not introduced by this patch, I reported it some > time ago here: > https://bugs.freedesktop.org/show_bug.cgi?id=80594 >
I put a patch for this bug into bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=80594 > > > > On 18 August 2014 12:18, Pekka Paalanen <ppaala...@gmail.com> wrote: > >> On Tue, 12 Aug 2014 11:35:07 +0200 >> Marek Chalupa <mchqwe...@gmail.com> wrote: >> >> > Test if when we get a signal, all signal sources for that signal >> > get dispatched. >> > >> > Signed-off-by: Marek Chalupa <mchqwe...@gmail.com> >> > --- >> > tests/event-loop-test.c | 38 ++++++++++++++++++++++++++++++++++++++ >> > 1 file changed, 38 insertions(+) >> > >> > diff --git a/tests/event-loop-test.c b/tests/event-loop-test.c >> > index e327a66..1709a1a 100644 >> > --- a/tests/event-loop-test.c >> > +++ b/tests/event-loop-test.c >> > @@ -173,6 +173,44 @@ TEST(event_loop_signal) >> > wl_event_loop_destroy(loop); >> > } >> > >> > +TEST(event_loop_multiple_same_signals) >> > +{ >> > + struct wl_event_loop *loop = wl_event_loop_create(); >> > + struct wl_event_source *s1, *s2; >> > + int calls_no = 0; >> > + int i; >> > + >> > + s1 = wl_event_loop_add_signal(loop, SIGUSR1, >> > + signal_callback, &calls_no); >> > + assert(s1); >> > + >> > + s2 = wl_event_loop_add_signal(loop, SIGUSR1, >> > + signal_callback, &calls_no); >> > + assert(s2); >> > + >> > + assert(wl_event_loop_dispatch(loop, 0) == 0); >> > + assert(!calls_no); >> > + >> > + /* Try it more times */ >> > + for (i = 0; i < 5; ++i) { >> > + calls_no = 0; >> > + kill(getpid(), SIGUSR1); >> > + assert(wl_event_loop_dispatch(loop, 0) == 0); >> > + assert(calls_no == 2); >> > + } >> > + >> > + wl_event_source_remove(s1); >> > + >> > + /* Try it again with one source */ >> > + calls_no = 0; >> > + kill(getpid(), SIGUSR1); >> > + assert(wl_event_loop_dispatch(loop, 0) == 0); >> > + assert(calls_no == 1); >> > + >> > + wl_event_source_remove(s2); >> > + >> > + wl_event_loop_destroy(loop); >> > +} >> > >> > static int >> > timer_callback(void *data) >> >> The first two of the three patches pushed. We have an explicit configure >> check from SFD_CLOEXEC, but I suppose we don't need to add one for >> SFD_NONBLOCK, because the two were supposedly introduced at the same >> time in glibc. >> >> I did not push this third patch, because in my testing, the test failed >> once. It was very hard, but I did manage to trigger it a second time >> too, by having lots of CPU and IO load on the machine and running the >> test in loop until it failed: >> >> test "event_loop_destroy": exit status 0, pass. >> event-loop-test: tests/event-loop-test.c:298: event_loop_timer_updates: >> Assertion `context.count == 2' failed. >> test "event_loop_timer_updates": signal 6, fail. >> test "event_loop_timer": exit status 0, pass. >> test "event_loop_multiple_same_signals": exit status 0, pass. >> test "event_loop_signal": exit status 0, pass. >> test "event_loop_free_source_with_data": exit status 0, pass. >> test "event_loop_post_dispatch_check": exit status 0, pass. >> 7 tests, 6 pass, 1 fail >> >> I would like to see some fix on that, even if only theoretical, before >> I push this one. >> >> Or an ack from someone else that we should just push this and wait for >> the fallout if any. >> >> >> Thanks, >> pq >> > > Regards, > Marek > Regards, Marek
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel