mirror of
https://github.com/yawut/SDL.git
synced 2026-06-12 11:42:00 -05:00
Couriersud fixed bug #603
Using the following sequence SDL_Init(..:) SDL_CreateWindow(..., SDL_WINDOW_OPENGL) SDL_DestroyWindow SDL_CreateWindow(..., SDL_WINDOW_OPENGL) SDL will crash in X11_GL_GetVisual. This is due to the fact that during SDL_DestroyWindow X11_GL_Shutdown was called because the last window has been closed. On the next call to SDL_CreateWindow the library is still loaded and only the memory is reinitialized. Function pointers such as gl_data->glXChooseVisual will not be reinitialized. Consequently, SDL will crash due to a NULL pointer access. The attached patch corrects the behaviour.
This commit is contained in:
parent
38b73b01d9
commit
bfe61733da
|
|
@ -73,26 +73,26 @@ X11_GL_LoadLibrary(_THIS, const char *path)
|
|||
void *handle;
|
||||
|
||||
if (_this->gl_config.driver_loaded) {
|
||||
/* do not return without reinitializing the function hooks */
|
||||
if (path) {
|
||||
SDL_SetError("OpenGL library already loaded");
|
||||
return -1;
|
||||
} else {
|
||||
++_this->gl_config.driver_loaded;
|
||||
return 0;
|
||||
}
|
||||
handle = _this->gl_config.dll_handle;
|
||||
} else {
|
||||
if (path == NULL) {
|
||||
path = SDL_getenv("SDL_OPENGL_LIBRARY");
|
||||
}
|
||||
if (path == NULL) {
|
||||
path = DEFAULT_OPENGL;
|
||||
}
|
||||
handle = GL_LoadObject(path);
|
||||
if (!handle) {
|
||||
return -1;
|
||||
}
|
||||
_this->gl_config.dll_handle = handle;
|
||||
SDL_strlcpy(_this->gl_config.driver_path, path,
|
||||
SDL_arraysize(_this->gl_config.driver_path));
|
||||
}
|
||||
if (path == NULL) {
|
||||
path = SDL_getenv("SDL_OPENGL_LIBRARY");
|
||||
}
|
||||
if (path == NULL) {
|
||||
path = DEFAULT_OPENGL;
|
||||
}
|
||||
handle = GL_LoadObject(path);
|
||||
if (!handle) {
|
||||
return -1;
|
||||
}
|
||||
// LoadLibrary may be called before WindowCreate!
|
||||
// Must create the memory used by GL
|
||||
X11_GL_InitializeMemory(_this);
|
||||
|
||||
/* Load new function pointers */
|
||||
|
|
@ -123,10 +123,7 @@ X11_GL_LoadLibrary(_THIS, const char *path)
|
|||
return -1;
|
||||
}
|
||||
|
||||
_this->gl_config.dll_handle = handle;
|
||||
SDL_strlcpy(_this->gl_config.driver_path, path,
|
||||
SDL_arraysize(_this->gl_config.driver_path));
|
||||
_this->gl_config.driver_loaded = 1;
|
||||
++_this->gl_config.driver_loaded;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user