@@ -224,7 +224,6 @@ def __init__(self, opts, io_loop, **kwargs): # pylint: disable=W0231
224224 self .connected = False
225225 self ._closing = False
226226 self ._stream = None
227- self ._closing = False
228227 self ._closed = False
229228 self .backoff = opts .get ("tcp_reconnect_backoff" , 1 )
230229 self .resolver = kwargs .get ("resolver" )
@@ -1723,6 +1722,7 @@ def __init__(self, opts, io_loop, **kwargs): # pylint: disable=W0231
17231722 self ._closed = False
17241723 self ._stream_return_running = False
17251724 self ._stream = None
1725+ self .task = None
17261726 self .disconnect_callback = _null_callback
17271727 self .connect_callback = _null_callback
17281728 self .backoff = opts .get ("tcp_reconnect_backoff" , 1 )
@@ -1791,7 +1791,7 @@ async def _stream_return(self):
17911791 message_id ,
17921792 )
17931793 except tornado .iostream .StreamClosedError as e :
1794- log .error (
1794+ log .debug (
17951795 "tcp stream to %s:%s closed, unable to recv" ,
17961796 self .host ,
17971797 self .port ,
@@ -1833,6 +1833,8 @@ async def _stream_return(self):
18331833 stream .close ()
18341834 unpacker = salt .utils .msgpack .Unpacker ()
18351835 await self .connect ()
1836+ except asyncio .CancelledError :
1837+ log .debug ("Stream return cancelled" )
18361838 self ._stream_return_running = False
18371839
18381840 def _message_id (self ):
@@ -1881,9 +1883,20 @@ async def _do_send():
18811883 def close (self ):
18821884 if self ._closing :
18831885 return
1886+ self ._closing = True
18841887 if self ._stream is not None :
18851888 self ._stream .close ()
18861889 self ._stream = None
1890+ if self .task :
1891+ self .task .cancel ()
1892+ # Wait for the task to finish via asyncio
1893+ group = asyncio .gather (self .task )
1894+ try :
1895+ self .task .get_loop ().run_until_complete (group )
1896+ except RuntimeError :
1897+ # Ignore event loop was already running message
1898+ pass
1899+ self .task = None
18871900
18881901
18891902class TCPReqClient (RequestClient ):
0 commit comments