[PATCH 3/3] tests: add one more test for event-loop signal source
Marek Chalupa
mchqwerty at gmail.com
Tue Aug 19 03:37:53 PDT 2014
On 18 August 2014 12:23, Marek Chalupa <mchqwerty at 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 <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
>
Regards,
Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140819/e620c7fd/attachment.html>
More information about the wayland-devel
mailing list