On 10/22/2026 9:37 AM, Peter Maydell wrote:
> In do_fork() and clone_func() we currently use a pthread_mutex_t and
> a pthread_cond_t to allow the parent thread to wait until the child
> thread has started and e.g.  set fields like info->tid, before the
> parent reads those fields and otherwise proceeds.
> 
> Coverity points out that this use of a pthread condition variable
> isn't reliable: pthread_cond_wait() may wake up spuriously, so the
> idiom for "wait on a condition" should be "loop around calling
> pthread_cond_wait() until a predicate that was updated by the caller
> of pthread_cond_broadcast() is true".
> 
> This is quite old code; rather than fixing up its use of raw pthread
> condition variables, we can use a QemuSemaphore.  This gives us the
> "thread A waits until thread B signals it" semantics we want.  (Under
> the hood it is implemented with a mutex and condition variable.)
> 
> Cc: [email protected]
> Resolves: CID 1527417
> Signed-off-by: Peter Maydell <[email protected]>
> ---
> cc stable because in theory this could result in the parent thread
> waking up too early and weird stuff happening; however my guess is
> that in practice with one waiter and one signaller that the
> "spurious wakeup" case won't happen. At any rate this code has
> been like this for a very long time.
> 
> Disclaimer: tested with "make check" only, but that does include
> various linux-user tests that use multiple threads.
> ---
>  linux-user/syscall.c | 17 +++++------------
>  1 file changed, 5 insertions(+), 12 deletions(-)
> 

LGTM,
Reviewed-by: Pierrick Bouvier <[email protected]>

Reply via email to