@@ -864,16 +864,37 @@ def close(self):
864
864
self ._closing = True
865
865
self ._loop ._remove_reader (self ._sock_fd )
866
866
if not self ._buffer :
867
- self ._conn_lost += 1
868
867
self ._loop ._remove_writer (self ._sock_fd )
868
+ self ._conn_lost += 1
869
869
self ._loop .call_soon (self ._call_connection_lost , None )
870
870
871
871
def __del__ (self , _warn = warnings .warn ):
872
872
if self ._sock is not None :
873
- _warn (f"unclosed transport { self !r} " , ResourceWarning , source = self )
873
+ if self ._protocol_connected :
874
+ self ._protocol_connected = False
875
+ _warn (f"unclosed transport { self !r} " , ResourceWarning , source = self )
876
+
877
+ if self ._buffer :
878
+ self ._buffer .clear ()
879
+ self ._loop ._remove_writer (self ._sock_fd )
880
+
881
+ if not self ._closing :
882
+ self ._closing = True
883
+ self ._loop ._remove_reader (self ._sock_fd )
884
+
885
+ self ._conn_lost += 1
886
+
887
+ self ._sock_fd = - 1
874
888
self ._sock .close ()
875
- if self ._server is not None :
876
- self ._server ._detach (self )
889
+ self ._sock = None
890
+
891
+ self ._protocol = None
892
+ self ._loop = None
893
+
894
+ server = self ._server
895
+ if server is not None :
896
+ self ._server = None
897
+ server ._detach (self )
877
898
878
899
def _fatal_error (self , exc , message = 'Fatal error on transport' ):
879
900
# Should be called from exception handler only.
@@ -904,8 +925,10 @@ def _force_close(self, exc):
904
925
def _call_connection_lost (self , exc ):
905
926
try :
906
927
if self ._protocol_connected :
928
+ self ._protocol_connected = False
907
929
self ._protocol .connection_lost (exc )
908
930
finally :
931
+ self ._sock_fd = - 1
909
932
self ._sock .close ()
910
933
self ._sock = None
911
934
self ._protocol = None
0 commit comments