x11/gl: Trap GL context creation
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 25 Mar 2015 14:34:42 +0000 (14:34 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 25 Mar 2015 14:34:42 +0000 (14:34 +0000)
Avoid an X11 error in case the context creation fails, so we can avoid a
crash and pick it up in the upper layers, and display an error.

https://bugzilla.gnome.org/show_bug.cgi?id=746746

gdk/x11/gdkglcontext-x11.c

index bc36424fafac0e9134d0dabb4f261e7b414ad761..f7763e3a0a35dc542038cd8da838231f58e48ed8 100644 (file)
@@ -556,17 +556,25 @@ create_gl3_context (GdkDisplay   *display,
     GLX_CONTEXT_FLAGS_ARB, flags,
     None,
   };
+  GLXContext res;
 
   GdkX11GLContext *share_x11 = NULL;
 
   if (share != NULL)
     share_x11 = GDK_X11_GL_CONTEXT (share);
 
-  return glXCreateContextAttribsARB (gdk_x11_display_get_xdisplay (display),
-                                     config,
-                                     share_x11 != NULL ? share_x11->glx_context : NULL,
-                                     True,
-                                     attrib_list);
+  gdk_x11_display_error_trap_push (display);
+
+  res = glXCreateContextAttribsARB (gdk_x11_display_get_xdisplay (display),
+                                    config,
+                                    share_x11 != NULL ? share_x11->glx_context : NULL,
+                                    True,
+                                    attrib_list);
+
+  if (gdk_x11_display_error_trap_pop (display))
+    return NULL;
+
+  return res;
 }
 
 static gboolean