From 1255f416a0cc44c09048625dca20a8f4d1727416 Mon Sep 17 00:00:00 2001 From: Peter Fern Date: Mon, 11 Mar 2024 17:26:20 +1100 Subject: [PATCH] fix(host): Shutdown cleanly on event channel close --- cmd/hyprpanel/host.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/hyprpanel/host.go b/cmd/hyprpanel/host.go index a424221..f316ccd 100644 --- a/cmd/hyprpanel/host.go +++ b/cmd/hyprpanel/host.go @@ -242,12 +242,20 @@ func (h *host) watch(hyprEvtCh <-chan *eventv1.Event) { return case <-h.quitCh: return - case evt := <-hyprEvtCh: + case evt, ok := <-hyprEvtCh: + if !ok || evt == nil { + h.log.Error(`Received from closed hypr event channel`) + return + } h.log.Trace(`Received hypr event`, `kind`, evt.Kind) for _, panel := range h.panels { panel.Notify(evt) } - case evt := <-h.dbusEvtCh: + case evt, ok := <-h.dbusEvtCh: + if !ok || evt == nil { + h.log.Error(`Received from closed dbus event channel`) + return + } h.log.Trace(`Received dbus event`, `kind`, evt.Kind) switch evt.Kind { case eventv1.EventKind_EVENT_KIND_AUDIO_SINK_VOLUME_ADJUST: @@ -329,7 +337,11 @@ func (h *host) watch(hyprEvtCh <-chan *eventv1.Event) { panel.Notify(evt) } } - case evt := <-h.audioEvtCh: + case evt, ok := <-h.audioEvtCh: + if !ok || evt == nil { + h.log.Error(`Received from closed audio event channel`) + return + } h.log.Trace(`Received audio event`, `kind`, evt.Kind) for _, panel := range h.panels { panel.Notify(evt)