mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-21 19:29:55 +08:00
Hopeful fix for hangs in iothread tests in travis-ci
This commit is contained in:
parent
20d7a142c5
commit
2dfd57bb8c
@ -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…
x
Reference in New Issue
Block a user