Reentrancy is extremely hard to reason about, and leads to all kinds of terrible behavior. Alas, the current core QUIC code make extensive use of synchronous up-calls (via Vistors and Observers). We should eliminate this. Any time the chromium layer needs to call into the core QUIC layer, this should happen with chrome-style methods that take a CompletionCallback and return a net-error. If they fail synchronously, the chromium layer checks the net-error. Otherwise, the chromium layer awaits the callback, which is guaranteed to not be called reentrantly.
Comment 1 by bugdroid1@chromium.org
, Apr 29 2017