cocoa: don't send messages to uninitialized gl contexts

This should fix some crashes where we sent makeCurrentContext to a context that
was being freed from another thread.

/cc @mpv-player/stable
This commit is contained in:
Stefano Pigozzi 2014-07-19 11:56:36 +02:00
parent 1942e424e3
commit c76958d20c
1 changed files with 6 additions and 1 deletions

View File

@ -345,6 +345,9 @@ static void vo_cocoa_resize_redraw(struct vo *vo, int width, int height)
if (!s->resize_redraw) if (!s->resize_redraw)
return; return;
if (!s->gl_ctx)
return;
vo_cocoa_set_current_context(vo, true); vo_cocoa_set_current_context(vo, true);
[s->gl_ctx update]; [s->gl_ctx update];
@ -400,6 +403,7 @@ void vo_cocoa_release_nsgl_ctx(struct vo *vo)
{ {
struct vo_cocoa_state *s = vo->cocoa; struct vo_cocoa_state *s = vo->cocoa;
[s->gl_ctx release]; [s->gl_ctx release];
s->gl_ctx = nil;
} }
int vo_cocoa_config_window(struct vo *vo, uint32_t flags, void *gl_ctx) int vo_cocoa_config_window(struct vo *vo, uint32_t flags, void *gl_ctx)
@ -454,6 +458,7 @@ void vo_cocoa_set_current_context(struct vo *vo, bool current)
if (!s->inside_sync_section) if (!s->inside_sync_section)
[s->lock lock]; [s->lock lock];
if (s->gl_ctx)
[s->gl_ctx makeCurrentContext]; [s->gl_ctx makeCurrentContext];
} else { } else {
[NSOpenGLContext clearCurrentContext]; [NSOpenGLContext clearCurrentContext];