From f8d201b7c23d661b0362ade718cd08a47acb3985 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 19 May 2021 22:46:53 +0200 Subject: [PATCH] app: don't deadlock on wakeup arriving after window closure The previous change wasn't enough, because the `dead` channel wasn't being closed in an orderly window close. Add a close of the event output channel in the premature close code path to match the orderly close. Signed-off-by: Elias Naur --- app/window.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/window.go b/app/window.go index 57280de6..aaa26419 100644 --- a/app/window.go +++ b/app/window.go @@ -391,6 +391,7 @@ func (w *Window) destroy(err error) { w.ack <- struct{}{} w.out <- system.DestroyEvent{Err: err} close(w.dead) + close(w.out) for e := range w.in { w.ack <- struct{}{} if _, ok := e.(system.DestroyEvent); ok { @@ -427,6 +428,7 @@ func (w *Window) waitFrame() (*op.Ops, bool) { func (w *Window) run(opts *wm.Options) { defer close(w.out) + defer close(w.dead) if err := wm.NewWindow(&w.callbacks, opts); err != nil { w.out <- system.DestroyEvent{Err: err} return