January 30, 2003 PTHREAD_CLEANUP 3

### NAME

pthread_cleanup_push, pthread_cleanup_pop - add and remove cleanup functions for thread exit

### LIBRARY

POSIX Thread Library (libpthread, -lpthread)

### SYNOPSIS

```void` pthread_cleanup_push(```void *cleanup_routinevoid *``, 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

pthread_cleanup_push(``) and pthread_cleanup_pop(``) conform to ISO/IEC 9945-1:1996 (``POSIX.1'') .