]> git.cworth.org Git - apitrace/blobdiff - glretrace_glx.cpp
Fix a crash when loading multiple frames at once.
[apitrace] / glretrace_glx.cpp
index 1cfd591c171e71c5d20ba9caf78daab5f1dddeb3..72357ed7a0f0f01b6b3c46bf55eefb07df7796b8 100644 (file)
@@ -110,6 +110,17 @@ static void retrace_glXMakeCurrent(Trace::Call &call) {
     }
 }
 
+
+static void retrace_glXDestroyContext(Trace::Call &call) {
+    glws::Context *context = getContext(call.arg(1).toUIntPtr());
+
+    if (!context) {
+        return;
+    }
+
+    delete context;
+}
+
 static void retrace_glXSwapBuffers(Trace::Call &call) {
     frame_complete(call.no);
     if (double_buffer) {
@@ -153,7 +164,7 @@ static void retrace_glXMakeContextCurrent(Trace::Call &call) {
     }
 }
 
-static const retrace::Entry callbacks[] = {
+const retrace::Entry glretrace::glx_callbacks[] = {
     //{"glXBindChannelToWindowSGIX", &retrace_glXBindChannelToWindowSGIX},
     //{"glXBindSwapBarrierNV", &retrace_glXBindSwapBarrierNV},
     //{"glXBindSwapBarrierSGIX", &retrace_glXBindSwapBarrierSGIX},
@@ -177,7 +188,7 @@ static const retrace::Entry callbacks[] = {
     //{"glXCreatePixmap", &retrace_glXCreatePixmap},
     //{"glXCreateWindow", &retrace_glXCreateWindow},
     //{"glXCushionSGI", &retrace_glXCushionSGI},
-    //{"glXDestroyContext", &retrace_glXDestroyContext},
+    {"glXDestroyContext", &retrace_glXDestroyContext},
     //{"glXDestroyGLXPbufferSGIX", &retrace_glXDestroyGLXPbufferSGIX},
     //{"glXDestroyGLXPixmap", &retrace_glXDestroyGLXPixmap},
     //{"glXDestroyPbuffer", &retrace_glXDestroyPbuffer},
@@ -244,9 +255,6 @@ static const retrace::Entry callbacks[] = {
     {"glXWaitGL", &retrace::ignore},
     {"glXWaitVideoSyncSGI", &retrace::ignore},
     {"glXWaitX", &retrace::ignore},
+    {NULL, NULL},
 };
 
-void glretrace::retrace_call_glx(Trace::Call &call) {
-    retrace::dispatch(call, callbacks, sizeof(callbacks)/sizeof(callbacks[0]));
-}
-