mirror of
https://github.com/microsoft/debugpy.git
synced 2025-12-23 08:48:12 +00:00
Fix race condition in backchannel socket cleanup.
This commit is contained in:
parent
4ce4e709ce
commit
173f9b3a48
1 changed files with 16 additions and 8 deletions
|
|
@ -38,13 +38,19 @@ class BackChannel(object):
|
|||
self.port,
|
||||
)
|
||||
|
||||
server_socket = self._server_socket
|
||||
if server_socket is None:
|
||||
return # concurrent close()
|
||||
|
||||
try:
|
||||
self._socket, _ = self._server_socket.accept()
|
||||
sock, _ = server_socket.accept()
|
||||
except socket.timeout:
|
||||
raise log.exception("Timed out waiting for {0} to connect", self)
|
||||
|
||||
self._socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||
log.info("Incoming connection from {0} accepted.", self)
|
||||
|
||||
self._socket = sock
|
||||
self._setup_stream()
|
||||
|
||||
accept_thread = threading.Thread(
|
||||
|
|
@ -69,21 +75,23 @@ class BackChannel(object):
|
|||
return t
|
||||
|
||||
def close(self):
|
||||
if self._socket:
|
||||
sock = self._socket
|
||||
if sock:
|
||||
self._socket = None
|
||||
log.debug("Closing {0} socket of {1}...", self, self.session)
|
||||
try:
|
||||
self._socket.shutdown(socket.SHUT_RDWR)
|
||||
sock.shutdown(socket.SHUT_RDWR)
|
||||
except Exception:
|
||||
pass
|
||||
self._socket = None
|
||||
|
||||
if self._server_socket:
|
||||
server_socket = self._server_socket
|
||||
if server_socket:
|
||||
self._server_socket = None
|
||||
log.debug("Closing {0} server socket of {1}...", self, self.session)
|
||||
try:
|
||||
self._server_socket.shutdown(socket.SHUT_RDWR)
|
||||
server_socket.shutdown(socket.SHUT_RDWR)
|
||||
except Exception:
|
||||
pass
|
||||
self._server_socket = None
|
||||
|
||||
|
||||
class ScratchPad(object):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue