123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #include "pthread.h"
- #include "implement.h"
- pte_cleanup_t *
- pte_pop_cleanup (int execute)
- {
- pte_cleanup_t *cleanup;
- cleanup = (pte_cleanup_t *) pthread_getspecific (pte_cleanupKey);
- if (cleanup != NULL)
- {
- if (execute && (cleanup->routine != NULL))
- {
- (*cleanup->routine) (cleanup->arg);
- }
- pthread_setspecific (pte_cleanupKey, (void *) cleanup->prev);
- }
- return (cleanup);
- }
- void
- pte_push_cleanup (pte_cleanup_t * cleanup,
- pte_cleanup_callback_t routine, void *arg)
- {
- cleanup->routine = routine;
- cleanup->arg = arg;
- cleanup->prev = (pte_cleanup_t *) pthread_getspecific (pte_cleanupKey);
- pthread_setspecific (pte_cleanupKey, (void *) cleanup);
- }
|