67#if defined(HAVE_GRAPHICSMAGICK) || defined(HAVE_IMAGEMAGICK)
75static __thread jmp_buf _dt_magick_abort_jmp;
76static __thread
int _dt_magick_abort_armed = 0;
77static __thread
void (*_dt_magick_abort_prev_handler)(int) = NULL;
79static void _dt_magick_abort_handler(
int sig)
82 if(_dt_magick_abort_armed)
84 _dt_magick_abort_armed = 0;
85 longjmp(_dt_magick_abort_jmp, 1);
89 signal(SIGABRT, SIG_DFL);
93#define DT_MAGICK_ABORT_GUARD(label, fname, recovery) \
94 _dt_magick_abort_prev_handler = signal(SIGABRT, _dt_magick_abort_handler); \
95 if(setjmp(_dt_magick_abort_jmp)) \
97 fprintf(stderr, "[%s] caught an internal abort() raised by the image library while loading `%s' - " \
98 "treating it as corrupted\n", (label), (fname)); \
99 signal(SIGABRT, _dt_magick_abort_prev_handler); \
100 dt_set_signal_handlers(); \
103 _dt_magick_abort_armed = 1;
105#define DT_MAGICK_ABORT_GUARD_DISARM() \
108 _dt_magick_abort_armed = 0; \
109 signal(SIGABRT, _dt_magick_abort_prev_handler); \
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))