diff --git a/pyrogram/methods/utilities/idle.py b/pyrogram/methods/utilities/idle.py index 04a4784523..924cb1b602 100644 --- a/pyrogram/methods/utilities/idle.py +++ b/pyrogram/methods/utilities/idle.py @@ -69,19 +69,18 @@ async def main(): asyncio.run(main()) """ - task = None + loop = asyncio.get_event_loop() + sig_event = asyncio.Event() - def signal_handler(signum, __): + def signal_handler(signum): log.info(f"Stop signal received ({signals[signum]}). Exiting...") - asyncio.get_event_loop().run_in_executor(None, task.cancel) + if not sig_event.is_set(): + loop.call_soon_threadsafe(sig_event.set) for s in (SIGINT, SIGTERM, SIGABRT): - signal_fn(s, signal_handler) + loop.add_signal_handler(s, signal_handler, s) - while True: - task = asyncio.create_task(asyncio.sleep(600)) - - try: - await task - except asyncio.CancelledError: - break + try: + await sig_event.wait() + except asyncio.CancelledError: + pass