[PATCH 3/3] tests: add one more test for event-loop signal source

Marek Chalupa mchqwerty at gmail.com
Mon Aug 18 03:23:07 PDT 2014


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


On 18 August 2014 12:18, Pekka Paalanen <ppaalanen at gmail.com> wrote:

> On Tue, 12 Aug 2014 11:35:07 +0200
> Marek Chalupa <mchqwerty at gmail.com> wrote:
>
> > Test if when we get a signal, all signal sources for that signal
> > get dispatched.
> >
> > Signed-off-by: Marek Chalupa <mchqwerty at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140818/8728aabb/attachment-0001.html>


More information about the wayland-devel mailing list