<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On 18 August 2014 12:23, Marek Chalupa <span dir="ltr"><<a href="mailto:mchqwerty@gmail.com" target="_blank">mchqwerty@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<br><br>thanks for reviewing.<br><br>The failure you got is not introduced by this patch, I reported it some time ago here:<br>
<a href="https://bugs.freedesktop.org/show_bug.cgi?id=80594" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=80594</a></div></blockquote><div> </div><div>I put a patch for this bug into bugzilla:<br><br><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80594">https://bugs.freedesktop.org/show_bug.cgi?id=80594</a><br>
</div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div class="h5"><br>
<div class="gmail_extra"><br><br><div class="gmail_quote">On 18 August 2014 12:18, Pekka Paalanen <span dir="ltr"><<a href="mailto:ppaalanen@gmail.com" target="_blank">ppaalanen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

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