Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
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 */
#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;