Cancel unfinished upstream work before removing request routing
When a streaming request times out on a shared upstream connection, removing its local routing entry is not cancellation. Send the request-scoped interrupt while the context is still available, then remove routing in a finally block. Bound the interrupt attempt so backpressure cannot turn a deadline into an indefinite wait, and preserve the original timeout or cancellation if cleanup fails. Completed requests should skip interruption. Test blocked writes and repeated cancellation, not only successful sends. This repairs cleanup semantics; it does not explain the original latency or prove the backend acknowledged cancellation.
Applies when: Multiple streaming requests reuse a persistent upstream connection. Keywords: streaming timeout cancellation context routing shared websocket cleanup backpressure