mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 12:53:13 +00:00
Hopeful fix for hangs in iothread tests in travis-ci
This commit is contained in:
parent
20d7a142c5
commit
2dfd57bb8c
1 changed files with 7 additions and 1 deletions
|
@ -315,7 +315,13 @@ static void iothread_service_main_thread_requests(void)
|
|||
req->done = true;
|
||||
}
|
||||
|
||||
// Ok, we've handled everybody. Announce the good news, and allow ourselves to be unlocked
|
||||
/* Ok, we've handled everybody. Announce the good news, and allow ourselves to be unlocked. Note we must do this while holding the lock. Otherwise we race with the waiting threads:
|
||||
1. waiting thread checks for done, sees false
|
||||
2. main thread performs request, sets done to true, posts to condition
|
||||
3. waiting thread unlocks lock, waits on condition (forever)
|
||||
Because the waiting thread performs step 1 under the lock, if we take the lock, we avoid posting before the waiting thread is waiting.
|
||||
*/
|
||||
scoped_lock broadcast_lock(s_main_thread_performer_lock);
|
||||
VOMIT_ON_FAILURE(pthread_cond_broadcast(&s_main_thread_performer_condition));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue