diff --git a/proxy/tg_ws_proxy.py b/proxy/tg_ws_proxy.py index 3869749..92c5c12 100644 --- a/proxy/tg_ws_proxy.py +++ b/proxy/tg_ws_proxy.py @@ -521,14 +521,19 @@ async def _run(stop_event: Optional[asyncio.Event] = None): return_when=asyncio.FIRST_COMPLETED, ) if stop_task in done: - server.close() - await server.wait_closed() + for task in list(_client_tasks): + task.cancel() + if _client_tasks: + await asyncio.gather( + *_client_tasks, return_exceptions=True) if not serve_task.done(): serve_task.cancel() try: await serve_task except asyncio.CancelledError: pass + server.close() + await server.wait_closed() else: stop_task.cancel() try: diff --git a/utils/tray_common.py b/utils/tray_common.py index 1582833..503dc4e 100644 --- a/utils/tray_common.py +++ b/utils/tray_common.py @@ -364,6 +364,9 @@ def stop_proxy() -> None: loop.call_soon_threadsafe(stop_ev.set) if _proxy_thread: _proxy_thread.join(timeout=5) + if _proxy_thread.is_alive(): + log.warning("Proxy thread did not stop within timeout; " + "port may still be in use") _proxy_thread = None log.info("Proxy stopped") @@ -371,7 +374,7 @@ def stop_proxy() -> None: def restart_proxy(cfg: dict, on_error: Callable[[str], None]) -> None: log.info("Restarting proxy...") stop_proxy() - time.sleep(0.3) + time.sleep(1.0) start_proxy(cfg, on_error)