sna: Assert that sigtrap is active
authorChris Wilson <chris@chris-wilson.co.uk>
Sat, 22 Feb 2014 12:44:16 +0000 (12:44 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Sat, 22 Feb 2014 14:35:10 +0000 (14:35 +0000)
Curiouser and curiouser.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
src/sna/sna.h
src/sna/sna_accel.c
src/sna/sna_composite.c

index 0b5de8e..329853d 100644 (file)
@@ -1035,12 +1035,13 @@ void sna_image_composite(pixman_op_t        op,
 extern jmp_buf sigjmp[4];
 extern volatile sig_atomic_t sigtrap;
 
-#define sigtrap_assert() assert(sigtrap == 0)
+#define sigtrap_assert_inactive() assert(sigtrap == 0)
+#define sigtrap_assert_active() assert(sigtrap > 0 && sigtrap <= ARRAY_SIZE(sigjmp))
 #define sigtrap_get() sigsetjmp(sigjmp[sigtrap++], 1)
 
 static inline void sigtrap_put(void)
 {
-       assert(sigtrap > 0);
+       sigtrap_assert_active();
        --sigtrap;
 }
 
index 0dac561..64b60c2 100644 (file)
@@ -17071,7 +17071,7 @@ void sna_accel_close(struct sna *sna)
 
 void sna_accel_block_handler(struct sna *sna, struct timeval **tv)
 {
-       sigtrap_assert();
+       sigtrap_assert_inactive();
 
        if (sna->kgem.need_retire)
                kgem_retire(&sna->kgem);
@@ -17158,11 +17158,11 @@ void sna_accel_wakeup_handler(struct sna *sna)
                _kgem_submit(&sna->kgem);
        }
 
-       sigtrap_assert();
+       sigtrap_assert_inactive();
 }
 
 void sna_accel_free(struct sna *sna)
 {
        DBG(("%s\n", __FUNCTION__));
-       sigtrap_assert();
+       sigtrap_assert_inactive();
 }
index 6a2eff6..5b61f95 100644 (file)
@@ -570,6 +570,7 @@ sna_composite_fb(CARD8 op,
 
                                        assert(box->x2 > box->x1 && box->y2 > box->y1);
 
+                                       sigtrap_assert_active();
                                        memcpy_blt(src_pixmap->devPrivate.ptr,
                                                   dst_pixmap->devPrivate.ptr,
                                                   dst_pixmap->drawable.bitsPerPixel,
@@ -593,6 +594,7 @@ sna_composite_fb(CARD8 op,
 
        if (src_image && dest_image && !(mask && !mask_image)) {
                if (sigtrap_get() == 0) {
+                       sigtrap_assert_active();
                        sna_image_composite(op, src_image, mask_image, dest_image,
                                            src_x + src_xoff, src_y + src_yoff,
                                            msk_x + msk_xoff, msk_y + msk_yoff,
@@ -1094,6 +1096,7 @@ fallback:
                                                          dst->format))
                                goto fallback_composite;
 
+                       sigtrap_assert_active();
                        if (pixel == 0 &&
                            box->x2 - box->x1 == pixmap->drawable.width &&
                            box->y2 - box->y1 == pixmap->drawable.height) {