You need to do this:
JMP_BUF recovery; if (SETJMP(recovery)) { /* Something was thrown, value in throw_value */ UNSETJMP(recovery); /* If you're not going to rethrow, you need to free */ free_svalue(&throw_value); mark_free_svalue (&throw_value); } else { /* Do stuff that can throw */
UNSETJMP(recovery); }