GLX context memory leak if context was bound to drawable on thread exit
Submitted by Rinat
Assigned to mes..@..op.org
Description
glXDestroyContext leaks memory if context was bound and there was no glXMakeCurrent call before thread termination.
Here is sample code for reproduction.
// gcc glXDestroyContext-memleak.c -std=gnu99 -lpthread -lGL -lX11 #include <pthread.h> #include <GL/glx.h> #include <unistd.h>
GLXContext glc; GLXContext root_glc; Display *dpy; XVisualInfo *xvi;
void *thread_func1(void *p) { Window root_wnd = XDefaultRootWindow(dpy); glc = glXCreateContext(dpy, xvi, NULL, GL_TRUE); glXMakeCurrent(dpy, root_wnd, glc); glXDestroyContext(dpy, glc); return NULL; }
int main(void) { GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None }; dpy = XOpenDisplay(NULL); xvi = glXChooseVisual(dpy, 0, att);
for (int k = 0; k < 30000; k ++) {
pthread_t t;
pthread_create(&t, NULL, thread_func1, NULL);
pthread_join(t, NULL);
sleep(1);
}
return 0;
}
Version: 9.2