kmsdrm: fix segfault on quit beacuse of freed _this->egl_data.
parent
d43e666eed
commit
0d16761cbe
|
@ -31,7 +31,7 @@
|
||||||
/* OpenGLES functions */
|
/* OpenGLES functions */
|
||||||
#define KMSDRM_GLES_GetAttribute SDL_EGL_GetAttribute
|
#define KMSDRM_GLES_GetAttribute SDL_EGL_GetAttribute
|
||||||
#define KMSDRM_GLES_GetProcAddress SDL_EGL_GetProcAddress
|
#define KMSDRM_GLES_GetProcAddress SDL_EGL_GetProcAddress
|
||||||
#define KMSDRM_GLES_UnloadLibrary SDL_EGL_UnloadLibrary
|
//#define KMSDRM_GLES_UnloadLibrary SDL_EGL_UnloadLibrary
|
||||||
#define KMSDRM_GLES_DeleteContext SDL_EGL_DeleteContext
|
#define KMSDRM_GLES_DeleteContext SDL_EGL_DeleteContext
|
||||||
#define KMSDRM_GLES_GetSwapInterval SDL_EGL_GetSwapInterval
|
#define KMSDRM_GLES_GetSwapInterval SDL_EGL_GetSwapInterval
|
||||||
|
|
||||||
|
|
|
@ -652,7 +652,7 @@ KMSDRM_CreateDevice(int devindex)
|
||||||
#if SDL_VIDEO_OPENGL_EGL
|
#if SDL_VIDEO_OPENGL_EGL
|
||||||
device->GL_LoadLibrary = KMSDRM_GLES_LoadLibrary;
|
device->GL_LoadLibrary = KMSDRM_GLES_LoadLibrary;
|
||||||
device->GL_GetProcAddress = KMSDRM_GLES_GetProcAddress;
|
device->GL_GetProcAddress = KMSDRM_GLES_GetProcAddress;
|
||||||
device->GL_UnloadLibrary = KMSDRM_GLES_UnloadLibrary;
|
//device->GL_UnloadLibrary = KMSDRM_GLES_UnloadLibrary;
|
||||||
device->GL_CreateContext = KMSDRM_GLES_CreateContext;
|
device->GL_CreateContext = KMSDRM_GLES_CreateContext;
|
||||||
device->GL_MakeCurrent = KMSDRM_GLES_MakeCurrent;
|
device->GL_MakeCurrent = KMSDRM_GLES_MakeCurrent;
|
||||||
device->GL_SetSwapInterval = KMSDRM_GLES_SetSwapInterval;
|
device->GL_SetSwapInterval = KMSDRM_GLES_SetSwapInterval;
|
||||||
|
@ -1211,6 +1211,18 @@ KMSDRM_VideoQuit(_THIS)
|
||||||
SDL_GL_UnloadLibrary();
|
SDL_GL_UnloadLibrary();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Since drm_atomic_commit() uses EGL functions internally, we need "_this->egl_data"
|
||||||
|
NOT to be freed by SDL internals before.
|
||||||
|
SDL internals call device->GL_UnloadLibrary automatically earlier, so we DON'T assign
|
||||||
|
device->GL_UnloadLibrary to SDL_EGL_UnloadLibrary(), and that way WE DECIDE WHERE
|
||||||
|
we want to free "_this->egl_data" by manually calling SDL_EGL_UnloadLibrary(),
|
||||||
|
which happens to be here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if SDL_VIDEO_OPENGL_EGL
|
||||||
|
SDL_EGL_UnloadLibrary(_this);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Free connector */
|
/* Free connector */
|
||||||
if (dispdata && dispdata->connector) {
|
if (dispdata && dispdata->connector) {
|
||||||
if (dispdata->connector->connector) {
|
if (dispdata->connector->connector) {
|
||||||
|
|
Loading…
Reference in New Issue