PTHREAD_CLEANUP(3) | Library Functions Manual | PTHREAD_CLEANUP(3)

# NAME

`pthread_cleanup_push`, `pthread_cleanup_pop` — add and remove cleanup functions for thread exit

# LIBRARY

POSIX Threads Library (libpthread, -lpthread)

# SYNOPSIS

`#include <pthread.h>`

void
`pthread_cleanup_push`(void (*cleanup_routine)(void *), void *arg);

void
`pthread_cleanup_pop`(int execute);

# DESCRIPTION

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.

# RETURN VALUES

Neither `pthread_cleanup_push`() nor `pthread_cleanup_pop`() returns a value.

# ERRORS

None.

# SEE ALSO

pthread_exit(3)

# STANDARDS

Both functions conform to IEEE Std 1003.1-2001 (“POSIX.1”).

July 9, 2010 | NetBSD 11.0