[PATCH 2/4] display-test: make use of create_thread function
Marek Chalupa
mchqwerty at gmail.com
Tue Sep 9 00:47:53 PDT 2014
Hi,
On 4 September 2014 14:46, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> On Fri, 29 Aug 2014 11:21:29 +0200
> Marek Chalupa <mchqwerty at gmail.com> wrote:
>
> > This function is used in one test only, but its functionality can be
> > used in another tests to (create thread and wait until it is sleeping).
> > We just need to pass the starting function for the thread as an argument.
> >
> > Signed-off-by: Marek Chalupa <mchqwerty at gmail.com>
> > ---
> > tests/display-test.c | 55
> +++++++++++++++++++++++++---------------------------
> > 1 file changed, 26 insertions(+), 29 deletions(-)
> >
> > diff --git a/tests/display-test.c b/tests/display-test.c
> > index c420cbe..1289866 100644
> > --- a/tests/display-test.c
> > +++ b/tests/display-test.c
> > @@ -333,6 +333,28 @@ register_reading(struct wl_display *display)
> > assert(wl_display_flush(display) >= 0);
> > }
> >
> > +/* create thread that will call prepare+read so that
> > + * it will block */
> > +static pthread_t
> > +create_thread(struct client *c, void *(*func)(void*))
> > +{
> > + pthread_t thread;
> > +
> > + c->display_stopped = 0;
> > + /* func must set display->stopped to 1 before sleeping */
> > + assert(pthread_create(&thread, NULL, func, c) == 0);
> > +
> > + /* make sure the thread is sleeping. It's a little bit racy
> > + * (setting display_stopped to 1 and calling
> wl_display_read_events)
> > + * so call usleep once again after the loop ends - it should
> > + * be sufficient... */
> > + while (c->display_stopped == 0)
> > + usleep(500);
> > + usleep(10000);
> > +
> > + return thread;
> > +}
> > +
> > static void *
> > thread_read_error(void *data)
> > {
> > @@ -369,16 +391,7 @@ threading_post_err(void)
> > c->display_stopped = 0;
> >
> > /* create new thread that will register its intention too */
> > - assert(pthread_create(&thread, NULL, thread_read_error, c) == 0);
> > -
> > - /* make sure thread is sleeping. It's a little bit racy
> > - * (setting display_stopped to 1 and calling
> wl_display_read_events)
> > - * so call usleep once again after the loop ends - it should
> > - * be sufficient... */
> > - while (c->display_stopped == 0)
> > - usleep(500);
> > -
> > - usleep(10000);
> > + thread = create_thread(c, thread_read_error);
> >
> > /* so now we have sleeping thread waiting for a pthread_cond
> signal.
> > * The main thread must call wl_display_read_events().
> > @@ -429,22 +442,6 @@ thread_prepare_and_read(void *data)
> > pthread_exit(NULL);
> > }
> >
> > -static pthread_t
> > -create_thread(struct client *c)
> > -{
> > - pthread_t thread;
> > -
> > - c->display_stopped = 0;
> > - assert(pthread_create(&thread, NULL, thread_prepare_and_read, c)
> == 0);
> > -
> > - /* make sure thread is sleeping */
> > - while (c->display_stopped == 0)
> > - usleep(500);
> > - usleep(10000);
> > -
> > - return thread;
> > -}
> > -
> > /* test cancel read*/
> > static void
> > threading_cancel_read(void)
> > @@ -454,9 +451,9 @@ threading_cancel_read(void)
> >
> > register_reading(c->wl_display);
> >
> > - th1 = create_thread(c);
> > - th2 = create_thread(c);
> > - th3 = create_thread(c);
> > + th1 = create_thread(c, thread_prepare_and_read);
> > + th2 = create_thread(c, thread_prepare_and_read);
> > + th3 = create_thread(c, thread_prepare_and_read);
> >
> > /* all the threads are sleeping, waiting until read or cancel
> > * is called. Cancel the read and let the threads proceed */
>
> Hi,
>
> I just realized, 'man usleep' says:
>
> The interaction of this function with the SIGALRM signal, and
> with other timer functions
> such as alarm(2), sleep(3), nanosleep(2), setitimer(2),
> timer_create(2), timer_delete(2),
> timer_getoverrun(2), timer_gettime(2), timer_settime(2), ualarm(3)
> is unspecified.
>
> And we are using alarm() here.
>
Thanks, didn't realized that.
>
> Could you replace usleep() with nanosleep() in a follow-up patch?
>
>
Sure
>
> Thanks,
> pq
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140909/e8593326/attachment.html>
More information about the wayland-devel
mailing list