intel: Fix segfault in glXSwapBuffers with no bound context
authorAnuj Phogat <anuj.phogat@gmail.com>
Wed, 11 Jan 2012 23:26:10 +0000 (15:26 -0800)
committerAnuj Phogat <anuj.phogat@gmail.com>
Mon, 16 Jan 2012 23:07:17 +0000 (15:07 -0800)
Calling glXSwapBuffers with no bound context causes segmentation
fault in function intelDRI2Flush. All the gl calls should be
ignored after setting the current context to null. So the contents
of framebuffer stay unchanged. But the driver should not seg fault.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44614

Reported-by: Yi Sun <yi.sun@intel.com>
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Tested-by: Yi Sun <yi.sun@intel.com>
src/mesa/drivers/dri/intel/intel_screen.c

index b0e800b..a08f3d1 100644 (file)
@@ -115,13 +115,15 @@ intelDRI2Flush(__DRIdrawable *drawable)
    GET_CURRENT_CONTEXT(ctx);
    struct intel_context *intel = intel_context(ctx);
 
-   if (intel->gen < 4)
-      INTEL_FIREVERTICES(intel);
+   if (intel != NULL) {
+      if (intel->gen < 4)
+        INTEL_FIREVERTICES(intel);
 
-   intel->need_throttle = true;
+      intel->need_throttle = true;
 
-   if (intel->batch.used)
-      intel_batchbuffer_flush(intel);
+      if (intel->batch.used)
+        intel_batchbuffer_flush(intel);
+   }
 }
 
 static const struct __DRI2flushExtensionRec intelFlushExtension = {