aboutsummaryrefslogtreecommitdiff
path: root/modules/calendar-sync.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-24 17:57:54 -0500
committerCraig Jennings <c@cjennings.net>2026-07-24 17:57:54 -0500
commit1a704ba233523abb29f6ab7f52dfecd702a9bdd8 (patch)
tree70c73989350e8d22f09e61a45843ea0337c2eaf9 /modules/calendar-sync.el
parent0989858ed1182c978d1f40a1fab6850e46ff5d06 (diff)
downloaddotemacs-1a704ba233523abb29f6ab7f52dfecd702a9bdd8.tar.gz
dotemacs-1a704ba233523abb29f6ab7f52dfecd702a9bdd8.zip
fix(calendar-sync): guard the hourly timer body against repeating signalsHEADmain
- The sync timer body ran unguarded from an hourly run-at-time timer. - A signal in the timezone check or the sync fan-out errored every tick. - The same error, once an hour, indefinitely. - Wrapped the body in condition-case; an error is logged, not propagated. - Also demoted the timezone-change message to the silent log, like the module's other timer-path notices — an hourly timer shouldn't spam the echo area.
Diffstat (limited to 'modules/calendar-sync.el')
-rw-r--r--modules/calendar-sync.el32
1 files changed, 22 insertions, 10 deletions
diff --git a/modules/calendar-sync.el b/modules/calendar-sync.el
index 804d71fa..d504f246 100644
--- a/modules/calendar-sync.el
+++ b/modules/calendar-sync.el
@@ -300,16 +300,28 @@ When called non-interactively with nil, syncs all calendars."
;;; Timer management
(defun calendar-sync--sync-timer-function ()
- "Function called by sync timer.
-Checks for timezone changes and triggers re-sync if detected."
- (when (calendar-sync--timezone-changed-p)
- (let ((old-tz (calendar-sync--format-timezone-offset
- calendar-sync--last-timezone-offset))
- (new-tz (calendar-sync--format-timezone-offset
- (calendar-sync--current-timezone-offset))))
- (message "calendar-sync: Timezone change detected (%s → %s), re-syncing..."
- old-tz new-tz)))
- (calendar-sync--sync-all-calendars))
+ "Function called by the hourly sync timer.
+Checks for timezone changes and triggers re-sync if detected.
+
+The body is wrapped so a signal — from the timezone check or the sync
+fan-out — is caught and logged rather than propagated: this runs from a
+`run-at-time' timer, and an unguarded error would repeat on every tick,
+once an hour, indefinitely. The timezone-change notice goes to the silent
+log, not the echo area, since an hourly timer must not spam `message'."
+ (condition-case err
+ (progn
+ (when (calendar-sync--timezone-changed-p)
+ (let ((old-tz (calendar-sync--format-timezone-offset
+ calendar-sync--last-timezone-offset))
+ (new-tz (calendar-sync--format-timezone-offset
+ (calendar-sync--current-timezone-offset))))
+ (calendar-sync--log-silently
+ "calendar-sync: Timezone change detected (%s → %s), re-syncing..."
+ old-tz new-tz)))
+ (calendar-sync--sync-all-calendars))
+ (error
+ (calendar-sync--log-silently
+ "calendar-sync: sync timer error: %s" (error-message-string err)))))
;;;###autoload
(defun calendar-sync-start ()