1/* 2 * Copyright 2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "pthread_private.h" 8 9 10void 11__pthread_cleanup_push_handler(__pthread_cleanup_handler* handler) 12{ 13 pthread_thread* thread = pthread_self(); 14 if (thread == NULL) 15 return; 16 17 handler->previous = thread->cleanup_handlers; 18 thread->cleanup_handlers = handler; 19} 20 21 22__pthread_cleanup_handler* 23__pthread_cleanup_pop_handler(void) 24{ 25 pthread_thread* thread = pthread_self(); 26 if (thread == NULL) 27 return NULL; 28 29 __pthread_cleanup_handler* handler = thread->cleanup_handlers; 30 if (handler == NULL) 31 return NULL; 32 33 thread->cleanup_handlers = handler->previous; 34 return handler; 35} 36 37