jayji pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=84679d3173f67378af35fb881cc9d9e51a5dc977
commit 84679d3173f67378af35fb881cc9d9e51a5dc977 Author: Jean Guyomarc'h <jean.guyoma...@openwide.fr> Date: Mon Aug 22 19:52:49 2016 +0200 evas-gl_cocoa: fix crashes at engine startup Recently, the gl_cocoa engine started to crash at startup. glGetIntegerv() in gl_common was called without any gl context, and therefore segfaulted. We now make sure it is called after a gl context has been created and used. Thanks jpeg for troubleshooting. Fixes T4402 --- src/modules/evas/engines/gl_cocoa/evas_engine.c | 7 ------- src/modules/evas/engines/gl_cocoa/evas_engine.h | 2 ++ src/modules/evas/engines/gl_cocoa/evas_gl_cocoa_main.m | 9 +++++++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/modules/evas/engines/gl_cocoa/evas_engine.c b/src/modules/evas/engines/gl_cocoa/evas_engine.c index 224a592..27b159a 100644 --- a/src/modules/evas/engines/gl_cocoa/evas_engine.c +++ b/src/modules/evas/engines/gl_cocoa/evas_engine.c @@ -1304,12 +1304,6 @@ eng_image_load_error_get(void *data EINA_UNUSED, void *image) return im->im->cache_entry.load_error; } -static void * -_dlsym(const char *sym) -{ - return dlsym(RTLD_DEFAULT, sym); -} - static int module_open(Evas_Module *em) { @@ -1396,7 +1390,6 @@ module_open(Evas_Module *em) glsym_##sym = dlsym(RTLD_DEFAULT, #sym); LINK2GENERIC(evas_gl_symbols); - glsym_evas_gl_symbols(_dlsym); /* now advertise out own api */ em->functions = (void *)(&func); diff --git a/src/modules/evas/engines/gl_cocoa/evas_engine.h b/src/modules/evas/engines/gl_cocoa/evas_engine.h index 473ed7d..07d0dc6 100644 --- a/src/modules/evas/engines/gl_cocoa/evas_engine.h +++ b/src/modules/evas/engines/gl_cocoa/evas_engine.h @@ -10,6 +10,8 @@ #include "evas_gl_common.h" #include "Evas_Engine_GL_Cocoa.h" +extern Evas_Gl_Symbols glsym_evas_gl_symbols; + extern int _evas_engine_gl_cocoa_log_dom; #ifdef ERR diff --git a/src/modules/evas/engines/gl_cocoa/evas_gl_cocoa_main.m b/src/modules/evas/engines/gl_cocoa/evas_gl_cocoa_main.m index 7df919f..082de38 100644 --- a/src/modules/evas/engines/gl_cocoa/evas_gl_cocoa_main.m +++ b/src/modules/evas/engines/gl_cocoa/evas_gl_cocoa_main.m @@ -1,4 +1,5 @@ #include <Cocoa/Cocoa.h> +#include <dlfcn.h> #include "evas_engine.h" @@ -76,6 +77,12 @@ static NSOpenGLContext *_evas_gl_cocoa_shared_context = NULL; @end +static void * +_dlsym(const char *sym) +{ + return dlsym(RTLD_DEFAULT, sym); +} + Evas_GL_Cocoa_Window * eng_window_new(void *window, @@ -92,6 +99,8 @@ eng_window_new(void *window, gw->view = [[EvasGLView alloc] initWithFrame:NSMakeRect(0,0,w,h)]; NSOpenGLContext *ctx = [(NSOpenGLView*)gw->view openGLContext]; [ctx makeCurrentContext]; + + glsym_evas_gl_symbols(_dlsym); gw->gl_context = evas_gl_common_context_new(); if (!gw->gl_context) --