From 818cbe2c52a72335ffc36c0f6ea9e410dd2bc293 Mon Sep 17 00:00:00 2001 From: Stephen Hawkins Date: Wed, 19 Jul 2023 15:11:14 -0700 Subject: [PATCH] fix: Make flush thread a daemon thread to prevent shutdown hang --- logdna/logdna.py | 6 +++--- tests/test_logger.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/logdna/logdna.py b/logdna/logdna.py index 3a5043a..36aa9e2 100644 --- a/logdna/logdna.py +++ b/logdna/logdna.py @@ -78,8 +78,8 @@ def __init__(self, key, options={}): # Start the flusher self.flusher_stopped = threading.Event() - self.flusher = threading.Timer( - self.flush_interval_secs, self.flush_timer_worker) + self.flusher = threading.Thread( + target=self.flush_timer_worker, daemon=True) self.flusher.start() def flush_timer_worker(self): @@ -93,7 +93,7 @@ def flush_timer_worker(self): def close_flusher(self): if self.flusher: self.flusher_stopped.set() - self.flusher.cancel() + self.flusher.join() self.flusher = None def buffer_log(self, message): diff --git a/tests/test_logger.py b/tests/test_logger.py index 7fc0564..f195555 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -320,6 +320,11 @@ def get_sample_record(id): self.assertEqual(len(received), num_logs) self.assertEquals(set(received), set(range(num_logs))) + def test_when_handlerShutDown_then_handlerDoesNotHang(self): + handler = LogDNAHandler(LOGDNA_API_KEY, sample_options) + self.assertIsNotNone(handler) + # Do nothing. This test should pass by virtue of not hanging. + if __name__ == '__main__': unittest.main()