Please sign in to comment.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
core: wake Waker outside of lock.
Given: - Broker asleep in poll() - thread B calling Latch.put() Previously, - B takes lock, - B wakes socket by dropping GIL and writing to it - Broker wakes from poll(), acquires GIL only to find Latch._lock is held - Broker drops GIL, sleeps on futex() for _lock - B wakes, acquires GIL, releases _lock - Broker wakes from futex(), acquires lock Now, - B takes lock, updates state, releases lock - B wakes socket by droppping GIL and writing to it - Broker wakes from poll(), acquires GIL and _lock - Everyone lives happily ever after.
- Loading branch information
Showing with 4 additions and 2 deletions.
- +4 −2 mitogen/core.py