I think I will use the first one then. Are there any potential problems.. except for some code using longjmp() directly?
On Sat, 23 Aug 2008, Henrik Grubbström (Lysator) @ Pike (-) developers forum wrote:
ONERROR handle; SET_ONERROR (handle, my_free_function, my_mem); /* do stuff which may throw */ UNSET_ONERROR (handle);
If you want my_free_function to be called even if nothing was thrown, use CALL_AND_UNSET_ONERROR instead.
That's probably the proper solution in this case, but it's not quite a catch...
JMP_BUF ctx;
if (SETJMP(ctx)) { /* Something was thrown. */ } else { /* Some code that might throw. */ } UNSETJMP(ctx);