The
pthread_cleanup_push() function adds
cleanup_routine to the top of the stack of cleanup handlers that get called when the current thread exits.
The
pthread_cleanup_pop() function pops the top cleanup routine off of the current threads cleanup routine stack, and, if
execute is non-zero, it will execute the function.
When
cleanup_routine is called, it is passed
arg as its only argument.
These functions may be implemented as macros which contain scope delimiters; therefore, there must be a matching
pthread_cleanup_pop() for every
pthread_cleanup_push() at the same level of lexical scoping.
The effect of calling
longjmp() or
siglongjmp() is undefined after a call to
pthread_cleanup_push() but before the matching call to
pthread_cleanup_pop() after the jump buffer was filled.