forked from enlightenment/efl
evas: Gl_Cocoa - fix early segfault caused by unloaded symbols
Summary:
evas_gl_symbols() (introduced in commit 9a9d78d
) was not dlsym()ed
which led to unloaded symbols, so NULL function pointers which were happily
dereferenced, leading to an early segfault, and therefore to a broken engine.
@fix
Reviewers: cedric, raoulh
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1440
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
abb03f76c4
commit
ffb518fcdd
|
@ -13,6 +13,8 @@ typedef struct _Render_Engine Render_Engine;
|
||||||
typedef struct _Render_Engine_GL_Surface Render_Engine_GL_Surface;
|
typedef struct _Render_Engine_GL_Surface Render_Engine_GL_Surface;
|
||||||
typedef struct _Render_Engine_GL_Context Render_Engine_GL_Context;
|
typedef struct _Render_Engine_GL_Context Render_Engine_GL_Context;
|
||||||
|
|
||||||
|
Evas_Gl_Symbols glsym_evas_gl_symbols = NULL;
|
||||||
|
|
||||||
struct _Render_Engine
|
struct _Render_Engine
|
||||||
{
|
{
|
||||||
Evas_GL_Cocoa_Window *win;
|
Evas_GL_Cocoa_Window *win;
|
||||||
|
@ -1337,6 +1339,12 @@ eng_image_load_error_get(void *data EINA_UNUSED, void *image)
|
||||||
return im->im->cache_entry.load_error;
|
return im->im->cache_entry.load_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
_dlsym(const char *sym)
|
||||||
|
{
|
||||||
|
return dlsym(RTLD_DEFAULT, sym);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
module_open(Evas_Module *em)
|
module_open(Evas_Module *em)
|
||||||
{
|
{
|
||||||
|
@ -1422,6 +1430,12 @@ module_open(Evas_Module *em)
|
||||||
|
|
||||||
ORD(image_load_error_get);
|
ORD(image_load_error_get);
|
||||||
|
|
||||||
|
#define LINK2GENERIC(sym) \
|
||||||
|
glsym_##sym = dlsym(RTLD_DEFAULT, #sym);
|
||||||
|
|
||||||
|
LINK2GENERIC(evas_gl_symbols);
|
||||||
|
glsym_evas_gl_symbols(_dlsym);
|
||||||
|
|
||||||
/* now advertise out own api */
|
/* now advertise out own api */
|
||||||
em->functions = (void *)(&func);
|
em->functions = (void *)(&func);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue