~eliasnaur/gio

e2278b64c112545803b9471a0416268aef2b4c52 — Elias Naur 3 years ago 30ad632
app/headless: avoid race between ReleaseCurrent and MakeCurrent

Release context on MakeCurrent failure paths as well.

Fixes gio#144

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2 files changed, 8 insertions(+), 3 deletions(-)

M app/headless/headless.go
M app/internal/egl/egl.go
M app/headless/headless.go => app/headless/headless.go +3 -2
@@ 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
}

M app/internal/egl/egl.go => app/internal/egl/egl.go +5 -1
@@ 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
}