
Oxide and Friends Futurelock
26 snips
Nov 7, 2025 In this engaging discussion, Oxide engineers Dave Pacheco, John Gallagher, and Eliza Weisman tackle the mysterious 'Futurelock' issue found in async Rust. Dave dives into the investigation, revealing how a Nexus instance became unresponsive during a live update. John shares his insights on reproducing the deadlock, while Eliza discusses semaphore implementation details. Together, they explore the conceptual differences between tasks and futures, the hidden challenges of concurrency, and practical fixes to avoid this tricky pathology in the future.
AI Snips
Chapters
Transcript
Episode notes
Empty Channel, Many Blocked Senders
- The channel looked empty to the receiver while thousands of senders were blocked, creating a strong constraint on possible causes.
- That paradox ruled out many hypotheses and guided focused reverse engineering.
The 'Aha' Reproducer Moment
- In a pivotal meeting, Sean asked if a select with a mutably borrowed future could leave a permit held while another arm ran.
- John instantly realized that exact pattern existed in their code and wrote a minimal reproducer within minutes.
Task Versus Future Distinction Matters
- Futurelock arises when a single task polls multiple futures and one future holds a resource while the task stops polling the future that could release it.
- The task-vs-future distinction is load-bearing: futures are concurrency units, tasks are parallelism units.

