From e2278b64c112545803b9471a0416268aef2b4c52 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 4 Jul 2020 17:37:02 +0200 Subject: [PATCH] app/headless: avoid race between ReleaseCurrent and MakeCurrent Release context on MakeCurrent failure paths as well. Fixes gio#144 Signed-off-by: Elias Naur --- app/headless/headless.go | 5 +++-- app/internal/egl/egl.go | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/headless/headless.go b/app/headless/headless.go index 9ba7ee67..67544664 100644 --- a/app/headless/headless.go +++ b/app/headless/headless.go @@ -139,8 +139,9 @@ func contextDo(ctx context, f func() error) error { errCh <- err return } - defer ctx.ReleaseCurrent() - errCh <- f() + err := f() + ctx.ReleaseCurrent() + errCh <- err }() return <-errCh } diff --git a/app/internal/egl/egl.go b/app/internal/egl/egl.go index 3314cb55..a70fe513 100644 --- a/app/internal/egl/egl.go +++ b/app/internal/egl/egl.go @@ -166,12 +166,16 @@ func (c *Context) MakeCurrent() error { var err error c.srgbFBO, err = srgb.New(c.c) if err != nil { + c.ReleaseCurrent() return err } } if c.refreshFBO { c.refreshFBO = false - return c.srgbFBO.Refresh(c.width, c.height) + if err := c.srgbFBO.Refresh(c.width, c.height); err != nil { + c.ReleaseCurrent() + return err + } } return nil }