Tray exit lag fix
This commit is contained in:
parent
41d7923079
commit
a57be0971f
|
|
@ -790,7 +790,14 @@ async def _run(port: int, dc_opt: Dict[int, Optional[str]],
|
||||||
async def wait_stop():
|
async def wait_stop():
|
||||||
await stop_event.wait()
|
await stop_event.wait()
|
||||||
server.close()
|
server.close()
|
||||||
await server.wait_closed()
|
me = asyncio.current_task()
|
||||||
|
for task in list(asyncio.all_tasks()):
|
||||||
|
if task is not me:
|
||||||
|
task.cancel()
|
||||||
|
try:
|
||||||
|
await server.wait_closed()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
pass
|
||||||
asyncio.create_task(wait_stop())
|
asyncio.create_task(wait_stop())
|
||||||
|
|
||||||
async with server:
|
async with server:
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ _stop_event: Optional[threading.Event] = None
|
||||||
_async_stop: Optional[object] = None
|
_async_stop: Optional[object] = None
|
||||||
_tray_icon: Optional[object] = None
|
_tray_icon: Optional[object] = None
|
||||||
_config: dict = {}
|
_config: dict = {}
|
||||||
|
_exiting: bool = False
|
||||||
|
|
||||||
log = logging.getLogger("tg-ws-tray")
|
log = logging.getLogger("tg-ws-tray")
|
||||||
|
|
||||||
|
|
@ -198,7 +199,7 @@ def stop_proxy():
|
||||||
loop, stop_ev = _async_stop
|
loop, stop_ev = _async_stop
|
||||||
loop.call_soon_threadsafe(stop_ev.set)
|
loop.call_soon_threadsafe(stop_ev.set)
|
||||||
if _proxy_thread:
|
if _proxy_thread:
|
||||||
_proxy_thread.join(timeout=5)
|
_proxy_thread.join(timeout=2)
|
||||||
_proxy_thread = None
|
_proxy_thread = None
|
||||||
log.info("Proxy stopped")
|
log.info("Proxy stopped")
|
||||||
|
|
||||||
|
|
@ -401,8 +402,18 @@ def _on_open_logs(icon=None, item=None):
|
||||||
|
|
||||||
|
|
||||||
def _on_exit(icon=None, item=None):
|
def _on_exit(icon=None, item=None):
|
||||||
|
global _exiting
|
||||||
|
if _exiting:
|
||||||
|
os._exit(0)
|
||||||
|
return
|
||||||
|
_exiting = True
|
||||||
log.info("User requested exit")
|
log.info("User requested exit")
|
||||||
stop_proxy()
|
|
||||||
|
def _force_exit():
|
||||||
|
time.sleep(3)
|
||||||
|
os._exit(0)
|
||||||
|
threading.Thread(target=_force_exit, daemon=True, name="force-exit").start()
|
||||||
|
|
||||||
if icon:
|
if icon:
|
||||||
icon.stop()
|
icon.stop()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue