From 6e508d416d19f50dd2c1279b0bf781f3d37a1bc5 Mon Sep 17 00:00:00 2001 From: bbedward Date: Sat, 4 Jul 2026 10:52:52 -0400 Subject: [PATCH] core/wayland: fix fatal error handling when the socket becomes unavailable --- core/internal/server/wlcontext/context.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/internal/server/wlcontext/context.go b/core/internal/server/wlcontext/context.go index 9bbb30aa8..6a467019f 100644 --- a/core/internal/server/wlcontext/context.go +++ b/core/internal/server/wlcontext/context.go @@ -108,10 +108,7 @@ func (sc *SharedContext) eventDispatcher() { if r := recover(); r != nil { err := fmt.Errorf("FATAL: Wayland event dispatcher panic: %v", r) log.Error(err) - select { - case sc.fatalError <- err: - default: - } + sc.signalFatal(err) } }() @@ -141,6 +138,7 @@ func (sc *SharedContext) eventDispatcher() { continue case err != nil: log.Errorf("Poll error: %v", err) + sc.signalFatal(fmt.Errorf("wayland poll error: %w", err)) return } @@ -161,6 +159,7 @@ func (sc *SharedContext) eventDispatcher() { if consecutiveErrors >= maxConsecutiveErrors { log.Errorf("Fatal: Wayland connection unrecoverable after %d attempts. Exiting dispatcher.", maxConsecutiveErrors) + sc.signalFatal(fmt.Errorf("wayland connection unrecoverable after %d dispatch failures: %w", maxConsecutiveErrors, err)) return } @@ -172,6 +171,13 @@ func (sc *SharedContext) eventDispatcher() { } } +func (sc *SharedContext) signalFatal(err error) { + select { + case sc.fatalError <- err: + default: + } +} + func (sc *SharedContext) drainCmdQueue() { for { select {