@@ -145,7 +145,12 @@ async def sse_writer():
145
145
146
146
async with anyio .create_task_group () as tg :
147
147
148
- async def response_wrapper (scope : Scope , receive : Receive , send : Send ):
148
+ async def response_wrapper (
149
+ scope : Scope ,
150
+ receive : Receive ,
151
+ send : Send ,
152
+ transport : SseServerTransport ,
153
+ ):
149
154
"""
150
155
The EventSourceResponse returning signals a client close / disconnect.
151
156
In this case we close our side of the streams to signal the client that
@@ -156,10 +161,13 @@ async def response_wrapper(scope: Scope, receive: Receive, send: Send):
156
161
)(scope , receive , send )
157
162
await read_stream_writer .aclose ()
158
163
await write_stream_reader .aclose ()
164
+ await read_stream .aclose ()
165
+ await write_stream .aclose ()
166
+ transport ._read_stream_writers .pop (session_id )
159
167
logging .debug (f"Client session disconnected { session_id } " )
160
168
161
169
logger .debug ("Starting SSE response task" )
162
- tg .start_soon (response_wrapper , scope , receive , send )
170
+ tg .start_soon (response_wrapper , scope , receive , send , self )
163
171
164
172
logger .debug ("Yielding read and write streams" )
165
173
yield (read_stream , write_stream )
0 commit comments