Repository navigation
Commit 6601fd4
committed
Close a refused SSE stream outside the registry lock
## Motivation and Context
`StreamableHTTPTransport` closes every stream outside its registry lock, so a close that blocks
on the peer cannot hold every other session on `@mutex`. One path broke that rule: when a `GET` stream
could not be registered, because the session had gone or another stream had taken its place,
`store_stream_for_session` closed the refused stream inside the lock, and an error raised by
that close escaped the Rack body.
The refused stream is now closed after the lock is released and through `close_stream_safely`,
like the streams the transport drops everywhere else.
## How Has This Been Tested?
Three new tests in `test/mcp/server/transports/streamable_http_transport_test.rb`:
two refuse a second stream for a session, one checking from inside the stream's `close` that
the lock is free, the other that a `close` raising `IOError` is swallowed and the session keeps serving,
and the third refuses a stream for a session that is gone, checking the lock the same way.
Against the previous library, the first and the third find the lock held and the second raises.
## Breaking Changes
None.1 parent c090dd6 commit 6601fd4
2 files changed
Lines changed: 66 additions & 14 deletions
File tree
- lib/mcp/server/transports
- test/mcp/server/transports
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2444 | 2444 | | |
2445 | 2445 | | |
2446 | 2446 | | |
2447 | | - | |
| 2447 | + | |
2448 | 2448 | | |
2449 | | - | |
2450 | | - | |
2451 | | - | |
2452 | | - | |
2453 | | - | |
2454 | | - | |
2455 | | - | |
2456 | | - | |
2457 | | - | |
2458 | | - | |
2459 | | - | |
2460 | | - | |
2461 | | - | |
| 2449 | + | |
| 2450 | + | |
| 2451 | + | |
| 2452 | + | |
| 2453 | + | |
2462 | 2454 | | |
| 2455 | + | |
| 2456 | + | |
| 2457 | + | |
| 2458 | + | |
| 2459 | + | |
| 2460 | + | |
| 2461 | + | |
| 2462 | + | |
| 2463 | + | |
| 2464 | + | |
2463 | 2465 | | |
2464 | 2466 | | |
2465 | 2467 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
743 | 743 | | |
744 | 744 | | |
745 | 745 | | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
746 | 796 | | |
747 | 797 | | |
748 | 798 | | |
| |||
0 commit comments