Pthread cleanup stubs
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 4 May 2015 16:21:48 +0000 (12:21 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 6 May 2015 21:14:32 +0000 (17:14 -0400)
These cleanup stubs are similar to our waserror/poperror.  They interact
with pthread_cancel and exit.  If a thread exits or is cancelled, it's
cleanup functions are called.  Additionally, cleanup_pop takes a bool,
and when it's TRUE, it'll run the handler even when returning normally.

If someone wants to implement these and pthread_cancel, be my guest.

user/pthread/pthread.c
user/pthread/pthread.h

index fa26d2f..dbae9e0 100644 (file)
@@ -1426,3 +1426,15 @@ int pthread_cancel (pthread_t __th)
        abort();
        return -1;
 }
+
+void pthread_cleanup_push(void (*routine)(void *), void *arg)
+{
+       fprintf(stderr, "Unsupported %s!", __FUNCTION__);
+       abort();
+}
+
+void pthread_cleanup_pop(int execute)
+{
+       fprintf(stderr, "Unsupported %s!", __FUNCTION__);
+       abort();
+}
index 10e1137..fec9973 100644 (file)
@@ -261,6 +261,8 @@ extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
 extern int pthread_once (pthread_once_t *__once_control,
              void (*__init_routine) (void)) __nonnull ((1, 2));
 extern int pthread_cancel (pthread_t __th);
+void pthread_cleanup_push(void (*routine)(void *), void *arg);
+void pthread_cleanup_pop(int execute);
 
 #ifdef __cplusplus
   }