Does the abort() function in C clean the stack?
abort, c, stack-overflow
Solution
`abort` doesn't need to clear the stack; `longjmp` will "clear" it in that it will rewind the stack pointer back to the position of `setjmp`. If all else is correct, repeatedly invoking `longjmp` and `setjmp` will not cause stack overflow.
However, `longjmp` will skip normal execution path, which can call resource leaks in its own right. Consider this code:
char *s = malloc(...);
... use s ...
free(s);
If the "... use s ..." portion calls some function that `longjmp`s out of the code, `free` won't get a chance to get called and you will leak. The same applies to closing open files, sockets, freeing shared memory segments, reaping forked children, and so on.
For this reason `longjmp` is rarely used in C programming. My advice would be to avoid `assert` if you don't mean the program to exit. Simply use another macro in your unit tests, or switch to a testing framework that provides one.
Problem
It's possible to catch the SIGABRT and continue the program with a longjump for example. I wonder if this can lead to a stack overflow when I always call functions that invoke abort(). I need to know that because i want to use the assert macro (taht calls abort) in unit tests. If an assert fails, I want to continue with the next unit test.