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. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403174
This commit is contained in:
parent
4dd96455cc
commit
4dd047e9c7
1 changed files with 17 additions and 20 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue