From 7b0124208f894fd772ab6548da4dc0e35260fd3d Mon Sep 17 00:00:00 2001 From: agessaman Date: Thu, 16 Apr 2026 19:18:11 -0700 Subject: [PATCH] fix(scheduler): handle RuntimeError on threadsafe future.result Log loop-teardown RuntimeError at warning for scheduled sends, feed queue wait, and repeater cleanup_database; keep interval advert on broad Exception since send_advert failures use RuntimeError. --- modules/scheduler.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/scheduler.py b/modules/scheduler.py index 77f2ed0..0af5237 100644 --- a/modules/scheduler.py +++ b/modules/scheduler.py @@ -155,6 +155,8 @@ class MessageScheduler: try: future.result(timeout=60) # 60 second timeout self.bot._record_send_success() + except RuntimeError as e: + self.logger.warning("Event loop gone during scheduled message: %s", e) except Exception as e: self.logger.error(f"Error sending scheduled message: {type(e).__name__}: {e}") self.bot._record_send_failure(scheduler=self) @@ -482,6 +484,8 @@ class MessageScheduler: "work may still be running on the main loop (per-feed send spacing).", _FEED_MESSAGE_QUEUE_FUTURE_TIMEOUT, ) + except RuntimeError as e: + self.logger.warning("Event loop gone during feed message queue: %s", e) except Exception as e: self.logger.exception(f"Error processing message queue: {e}") else: @@ -554,6 +558,8 @@ class MessageScheduler: ) try: future.result(timeout=60) + except RuntimeError as e: + self.logger.warning("Event loop gone during cleanup_database: %s", e) except Exception as e: self.logger.error(f"Error in repeater_manager.cleanup_database: {type(e).__name__}: {e}") else: