Establishes a cleanup handler to be executed when the thread exits or is canceled.
pthread_cleanup_push(
                     *routine,
                     arg );
 
Argument         Data Type               Access
routine          opaque pthread_         read
                 cleanup_t
arg              opaque pthread_addr_t   read
int pthread_cleanup_push( pthread_cleanup_t *routine, pthread_addr_t arg);
This routine and pthread_cleanup_pop are implemented as macros and must appear as statements and in pairs within the same lexical scope. You can think of the pthread_cleanup_push macro as expanding to a string whose first character is a left brace ({) and pthread_ cleanup_pop as expanding to a string containing the corresponding right brace (}).