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);
}
