Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 25 Sep 2019 13:19:05 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Cc: changdiankang <changdiankang@...wei.com>
Subject: Re: [PATCH] time: Fix bug in timer_create

On Tue, Sep 24, 2019 at 11:16:41AM +0000, changdiankang wrote:
> time: Fix bug in timer_create
> 
> When create a SIGEV_THREAD timer, in helper thread "start",
> "id" is assigned with self->timer_id immediately after pthread_create.
> But the real timer_id is assigned to self->timer_id after SYS_timer_create.
> So "id" in "start" always be 0, and timer_delete will always fail.
> Put assignement of "id" after pthread_barrier_wait can fix this bug.
> 
> Signed-off-by: Chang Diankang <changdiankang@...wei.com<mailto:changdiankang@...wei.com>>
> 
> diff --git a/src/time/timer_create.c b/src/time/timer_create.c
> index c5e40a1..4172b9e 100644
> --- a/src/time/timer_create.c
> +++ b/src/time/timer_create.c
> @@ -48,13 +48,14 @@ static void *start(void *arg)
> {
>         pthread_t self = __pthread_self();
>         struct start_args *args = arg;
> -       int id = self->timer_id;
> +       int id;
>         jmp_buf jb;
> 
>         void (*notify)(union sigval) = args->sev->sigev_notify_function;
>         union sigval val = args->sev->sigev_value;
> 
>         pthread_barrier_wait(&args->b);
> +       id = self->timer_id;
>         for (;;) {
>                 siginfo_t si;
>                 while (sigwaitinfo(SIGTIMER_SET, &si) < 0);
> 

Thanks! In the future, please send patches as attachments rather than
inline since it looks like your mailer software is corrupting the
patch (converting tabs to spaces, maybe other problems too). I can
apply it manually though.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.