sna: Allow limited recursion within sigtrapped routines

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2013-10-30 18:48:10 +00:00
parent 426efd5f4b
commit ed16e34c00
2 changed files with 5 additions and 6 deletions

View File

@ -1008,16 +1008,16 @@ void sna_image_composite(pixman_op_t op,
uint16_t width,
uint16_t height);
extern jmp_buf sigjmp;
extern jmp_buf sigjmp[4];
extern volatile sig_atomic_t sigtrap;
#define sigtrap_assert() assert(sigtrap == 0)
#define sigtrap_get() sigsetjmp(sigjmp, ++sigtrap)
#define sigtrap_get() sigsetjmp(sigjmp[sigtrap++], 1)
static inline void sigtrap_put(void)
{
assert(sigtrap > 0);
--sigtrap;
sigtrap_assert();
}
#endif /* _SNA_H */

View File

@ -396,15 +396,14 @@ static void assert_pixmap_damage(PixmapPtr p)
#endif
#endif
jmp_buf sigjmp;
jmp_buf sigjmp[4];
volatile sig_atomic_t sigtrap;
static int sigtrap_handler(int sig)
{
if (sigtrap) {
/* XXX rate-limited squawk? */
sigtrap = 0;
siglongjmp(sigjmp, sig);
siglongjmp(sigjmp[--sigtrap], sig);
}
return -1;