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.
Ask episode
AI Snips
Chapters
Transcript
Episode notes
INSIGHT

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.
ANECDOTE

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.
INSIGHT

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.
Get the Snipd Podcast app to discover more snips from this episode
Get the app