haileymarshall
9f22f36625
fix(mcp-oauth): anchor 401 handler task to prevent GC mid-flight
...
`handle_401` spawned a dedup'd recovery coroutine via
`asyncio.create_task(_do_handle())` and discarded the returned task
reference. Python's event loop only keeps weak references to tasks, so
the coroutine could be garbage-collected before it called
`pending.set_result(...)`. Every concurrent caller awaiting that future
then hangs forever, and the `finally: entry.pending_401.pop(...)`
cleanup never runs — so subsequent 401s for the same key latch onto the
dead future too. Same pattern the adapter-side fixes address (#11997 ,
#11998 , #12000 , #12001 , #12006 ).
Hold the task in a process-wide set on the manager and discard it via
`add_done_callback` once it completes. Regression test covers both the
structural invariant (task tracked, then removed on completion) and a
concurrent dedup path with a forced `gc.collect()` between the handler's
await points.
2026-06-30 16:56:15 -07:00
..
2026-06-27 15:59:00 -07:00
2026-06-30 15:51:17 -07:00
2026-03-17 02:33:12 -07:00
2026-03-31 08:48:54 +09:00
2026-03-23 07:43:12 -07:00
2026-06-30 03:24:58 -07:00
2026-06-30 15:30:06 -07:00
2026-04-08 02:24:32 -07:00
2026-06-11 10:49:47 -07:00
2026-04-01 04:18:50 -07:00
2026-06-29 01:26:24 -07:00
2026-06-15 12:44:44 -04:00
2026-05-19 22:34:05 -07:00
2026-05-30 07:31:25 -07:00
2026-06-29 04:25:26 -07:00
2026-06-21 17:46:38 +05:30
2026-06-28 17:44:47 -05:00
2026-06-28 04:13:19 -07:00
2026-06-19 07:34:02 -07:00
2026-06-28 21:15:14 -05:00
2026-06-30 02:59:46 -07:00
2026-06-22 06:42:30 -07:00
2026-06-30 03:07:40 -07:00
2026-06-26 01:11:11 -07:00
2026-06-25 13:52:06 -07:00
2026-06-30 03:41:46 -07:00
2026-05-07 05:11:09 -07:00
2026-06-28 02:05:43 -07:00
2026-06-08 22:46:57 -07:00
2026-05-22 04:10:45 -07:00
2026-05-08 16:39:32 -07:00
2026-05-08 16:39:32 -07:00
2026-06-20 23:23:47 -07:00
2026-04-21 16:41:26 -07:00
2026-06-30 02:50:24 -07:00
2026-06-26 01:55:27 +05:30
2026-04-13 04:45:07 -07:00
2026-06-25 12:38:33 -07:00
2026-04-17 20:39:25 -07:00
2026-06-30 14:29:42 -07:00
2026-06-29 00:25:36 -07:00
2026-05-30 07:58:08 -07:00
2026-06-30 16:56:15 -07:00
2026-06-27 04:59:23 +05:30
2026-06-28 04:47:39 -07:00
2026-06-30 20:01:16 +05:30
2026-05-08 09:27:26 -07:00
2026-05-08 09:27:26 -07:00
2026-03-18 02:55:30 -07:00
2026-03-11 20:02:36 -07:00
2026-06-06 18:30:39 -07:00
2026-05-20 01:46:40 -05:00
2026-04-11 13:59:52 -07:00
2026-06-30 04:23:27 -05:00
2026-06-25 16:40:27 -05:00
2026-06-13 14:42:51 -07:00
2026-06-09 23:15:20 -05:00
2026-06-30 17:47:37 +05:30
2026-06-12 00:30:51 -05:00
2026-06-30 03:51:08 -07:00
2026-06-27 04:41:22 -07:00
2026-06-30 15:49:36 -07:00
2026-05-04 02:42:16 -07:00
2026-06-25 22:03:02 -07:00
2026-05-23 17:47:26 -07:00
2026-06-01 01:58:48 -07:00
2026-06-30 15:30:06 -07:00
2026-06-27 21:07:53 -07:00
2026-06-30 15:49:36 -07:00
2026-05-15 14:00:01 -07:00
2026-06-29 11:35:41 +10:00
2026-05-29 03:44:49 -07:00
2026-06-30 02:59:46 -07:00
2026-06-26 15:26:08 +05:30
2026-06-25 23:42:42 +05:30
2026-06-01 06:32:48 +05:30
2026-05-31 00:50:19 -07:00
2026-06-30 16:39:41 -07:00
2026-05-29 02:04:12 -07:00
2026-06-28 10:19:21 -05:00
2026-06-28 10:19:21 -05:00
2026-06-21 13:56:35 -07:00
2026-06-29 21:11:58 -07:00
2026-06-29 01:27:10 -07:00
2026-06-08 22:46:57 -07:00
2026-06-30 00:19:49 -07:00
2026-05-28 04:52:42 -07:00
2026-06-10 02:57:15 -07:00
2026-05-28 22:26:25 -07:00
2026-06-29 21:11:58 -07:00
2026-06-29 21:11:58 -07:00
2026-05-23 01:40:35 -07:00