File tree Expand file tree Collapse file tree 4 files changed +31
-7
lines changed Expand file tree Collapse file tree 4 files changed +31
-7
lines changed Original file line number Diff line number Diff line change @@ -281,11 +281,11 @@ def open(self):
281281
282282 def close (self ):
283283 """Closes the stream."""
284- if self .call is None :
285- return
284+ if self .call is not None :
285+ self . call . cancel ()
286286
287+ # Put None in request queue to signal termination.
287288 self ._request_queue .put (None )
288- self .call .cancel ()
289289 self ._request_generator = None
290290 self ._initial_request = None
291291 self ._callbacks = []
Original file line number Diff line number Diff line change @@ -197,11 +197,11 @@ async def open(self) -> None:
197197
198198 async def close (self ) -> None :
199199 """Closes the stream."""
200- if self .call is None :
201- return
200+ if self .call is not None :
201+ self . call . cancel ()
202202
203+ # Put None in request queue to signal termination.
203204 await self ._request_queue .put (None )
204- self .call .cancel ()
205205 self ._request_generator = None
206206 self ._initial_request = None
207207 self ._callbacks = []
Original file line number Diff line number Diff line change @@ -255,6 +255,21 @@ async def test_close(self):
255255 assert bidi_rpc ._initial_request is None
256256 assert not bidi_rpc ._callbacks
257257
258+ @pytest .mark .asyncio
259+ async def test_close_with_no_rpc (self ):
260+ bidi_rpc = bidi_async .AsyncBidiRpc (None )
261+
262+ await bidi_rpc .close ()
263+
264+ assert bidi_rpc .call is None
265+ assert bidi_rpc .is_active is False
266+ # ensure the request queue was signaled to stop.
267+ assert bidi_rpc .pending_requests == 1
268+ assert await bidi_rpc ._request_queue .get () is None
269+ # ensure request and callbacks are cleaned up
270+ assert bidi_rpc ._initial_request is None
271+ assert not bidi_rpc ._callbacks
272+
258273 @pytest .mark .asyncio
259274 async def test_close_no_rpc (self ):
260275 bidi_rpc = bidi_async .AsyncBidiRpc (None )
Original file line number Diff line number Diff line change @@ -301,10 +301,19 @@ def test_close(self):
301301 assert bidi_rpc ._initial_request is None
302302 assert not bidi_rpc ._callbacks
303303
304- def test_close_no_rpc (self ):
304+ def test_close_with_no_rpc (self ):
305305 bidi_rpc = bidi .BidiRpc (None )
306306 bidi_rpc .close ()
307307
308+ assert bidi_rpc .call is None
309+ assert bidi_rpc .is_active is False
310+ # ensure the request queue was signaled to stop.
311+ assert bidi_rpc .pending_requests == 1
312+ assert bidi_rpc ._request_queue .get () is None
313+ # ensure request and callbacks are cleaned up
314+ assert bidi_rpc ._initial_request is None
315+ assert not bidi_rpc ._callbacks
316+
308317 def test_send (self ):
309318 rpc , call = make_rpc ()
310319 bidi_rpc = bidi .BidiRpc (rpc )
You can’t perform that action at this time.
0 commit comments