i915: avoid dead lock in intel_meta_draw_poly. fix #13696
authorXiang, Haihao <haihao.xiang@intel.com>
Thu, 20 Dec 2007 08:49:25 +0000 (16:49 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Thu, 20 Dec 2007 08:49:25 +0000 (16:49 +0800)
src/mesa/drivers/dri/i915/intel_tris.c

index 4b45dc065c64ba21345d03f00abd57db9a41793f..474113cd6328a7f685ffaae9ea1876eaa1625873 100644 (file)
@@ -1074,8 +1074,10 @@ intel_meta_draw_poly(struct intel_context *intel,
 {
    union fi *vb;
    GLint i;
+   GLboolean was_locked = intel->locked;
 
-   LOCK_HARDWARE(intel);
+   if (!was_locked)
+       LOCK_HARDWARE(intel);
 
    /* All 3d primitives should be emitted with INTEL_BATCH_CLIPRECTS,
     * otherwise the drawing origin (DR4) might not be set correctly.
@@ -1094,7 +1096,9 @@ intel_meta_draw_poly(struct intel_context *intel,
    }
 
    INTEL_FIREVERTICES(intel);
-   UNLOCK_HARDWARE(intel);
+
+   if (!was_locked)
+       UNLOCK_HARDWARE(intel);
 }
 
 void