|
Message-ID: <20211216181600.GN7074@brightrain.aerifal.cx> Date: Thu, 16 Dec 2021 13:16:07 -0500 From: Rich Felker <dalias@...c.org> To: zuotina <zuotingyang@....com> Cc: musl@...ts.openwall.com Subject: Re: [pthread] pthread_barrier_wait invalid case On Thu, Dec 16, 2021 at 11:25:35PM +0800, zuotina wrote: > Hi everrone > > > I encountered a panic problem when using timer_create recently. > Although the probability is small, it still happened. > Finaly I found there is a problem in the code of phtread_barrier_wait, > and review code found that there may be problems in the following place, > 81 a_store(&b->_b_lock, 0); > 82 if (b->_b_waiters) __wake(&b->_b_lock, 1, 1); > If scheduling occurs between lines 81 and 82, it will be not good. > So I did an experiment and modified the source code of pthread_barrier_wait to verify my guess > ```c > 81 a_store(&b->_b_lock, 0); > /* If it is scheduled out here, when another thread executes pthread_barrier_wait again, > it can go through the entire function happily, that is, it will not be blocked */ > syscall(yiled); // new add for test > // When the dispatch comes back, this b has been released > 82 if (b->_b_waiters) __wake(&b->_b_lock, 1, 1); > ``` The intent here is that it's not possible that b has been released, because all waiters have to synchronize on b->_b_inst. It's possible there's a bug here. I'll look. What arch are you running on? > Here is an example of timer_create (src/time/timer_create.c) > There are two threads A and B call pthread_barrier_wait. > The call is as follows > A thread: (timer_create // parent thread) > { > ..... > // new add for test---begin > while(b->_b_inst == NULL) { > syscall(yield); > } > // new add for test---end > pthread_barrier_wait(); > } > B thread: (start // child thread) > { > ..... > // Ensure that this function is advanced to the if (!inst) {} branch of barrier_wait > pthread_barrier_wait(); > } > > > In short, the reason for panic is that pthread_barrier_wait is not blocked as expected; > I hope you help to confirm whether there is a problem with the implementation > of pthread_barrier_wait or am I wrong? > > > Looking forward to your reply. Thank you. Thanks for the report. 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.