sna: Allow limited recursion within sigtrapped routines
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
426efd5f4b
commit
ed16e34c00
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue