Fix duplicate HMS error notifications from race condition

Move _notified_hms_errors tracking update before the async notification
send to prevent concurrent status callbacks from both seeing the same
errors as new. This mirrors the existing milestone tracking pattern
which correctly updates before the await.
This commit is contained in:
SBCrumb
2026-02-12 09:12:50 -05:00
parent 38641e91e2
commit 107947495d
+3 -2
View File
@@ -410,6 +410,9 @@ async def on_printer_status_change(printer_id: int, state: PrinterState):
# Find new errors that haven't been notified yet
new_error_codes = current_error_codes - previously_notified
# Update tracking immediately to prevent duplicate notifications from concurrent callbacks
_notified_hms_errors[printer_id] = current_error_codes
if new_error_codes:
# Get the actual new errors for the notification
# Filter to severity >= 2 (skip informational/status messages like H2D sends)
@@ -480,8 +483,6 @@ async def on_printer_status_change(printer_id: int, state: PrinterState):
except Exception as e:
logging.getLogger(__name__).warning(f"HMS error notification failed: {e}")
# Update tracking with all current errors
_notified_hms_errors[printer_id] = current_error_codes
else:
# No HMS errors - clear tracking so future errors get notified
if printer_id in _notified_hms_errors: