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 b0e800b7ecce890950937f880ab88fed93334a7b..a08f3d12b673f79c5d1710608aa61dc9bbcb6273 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 = {