sna: Assert that sigtrap is active

Curiouser and curiouser.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2014-02-22 12:44:16 +00:00
parent 75cff26eba
commit aae3bfeb28
3 changed files with 9 additions and 5 deletions

View 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;
}

View 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();
}

View 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) {