mirror of
https://github.com/microsoft/debugpy.git
synced 2025-12-23 08:48:12 +00:00
wait for daemon threads to di
This commit is contained in:
parent
a726796574
commit
c16c706052
2 changed files with 20 additions and 9 deletions
|
|
@ -286,8 +286,12 @@ class IpcChannel(object):
|
|||
try:
|
||||
self._wait_for_message()
|
||||
except OSError as exc:
|
||||
if exc.errno == errno.EBADF: # socket closed
|
||||
return self.__exit
|
||||
if exc.errno == errno.EBADF or self.__exit: # socket closed
|
||||
return self.__exit
|
||||
raise
|
||||
except Exception:
|
||||
if self.__exit:
|
||||
return True
|
||||
raise
|
||||
try:
|
||||
msg = self.__message.pop(0)
|
||||
|
|
|
|||
|
|
@ -393,10 +393,10 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel):
|
|||
pydevd._vscprocessor = self
|
||||
self._closed = False
|
||||
|
||||
t = threading.Thread(target=self.loop.run_forever,
|
||||
self.event_loop_thread = threading.Thread(target=self.loop.run_forever,
|
||||
name='ptvsd.EventLoop')
|
||||
t.daemon = True
|
||||
t.start()
|
||||
self.event_loop_thread.daemon = True
|
||||
self.event_loop_thread.start()
|
||||
|
||||
def close(self):
|
||||
"""Stop the message processor and release its resources."""
|
||||
|
|
@ -413,7 +413,9 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel):
|
|||
self.send_event('exited', exitCode=ptvsd_sys_exit_code)
|
||||
self.send_event('terminated')
|
||||
|
||||
self.set_exit()
|
||||
self.loop.stop()
|
||||
self.event_loop_thread.join(0.1)
|
||||
|
||||
if self.socket:
|
||||
self.socket.shutdown(socket.SHUT_RDWR)
|
||||
|
|
@ -931,6 +933,11 @@ def _start(client, server):
|
|||
########################
|
||||
# pydevd hooks
|
||||
|
||||
def exit_handler(proc, server_thread):
|
||||
proc.close()
|
||||
if server_thread.is_alive():
|
||||
server_thread.join(0.1)
|
||||
|
||||
def start_server(port):
|
||||
"""Return a socket to a (new) local pydevd-handling daemon.
|
||||
|
||||
|
|
@ -941,8 +948,8 @@ def start_server(port):
|
|||
"""
|
||||
server = _create_server(port)
|
||||
client, _ = server.accept()
|
||||
pydevd, proc, _ = _start(client, server)
|
||||
atexit.register(proc.close)
|
||||
pydevd, proc, server_thread = _start(client, server)
|
||||
atexit.register(lambda: exit_handler(proc, server_thread))
|
||||
return pydevd
|
||||
|
||||
|
||||
|
|
@ -956,8 +963,8 @@ def start_client(host, port):
|
|||
"""
|
||||
client = _create_client()
|
||||
client.connect((host, port))
|
||||
pydevd, proc, _ = _start(client, None)
|
||||
atexit.register(proc.close)
|
||||
pydevd, proc, server_thread = _start(client, None)
|
||||
atexit.register(lambda: exit_handler(proc, server_thread))
|
||||
return pydevd
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue