#define __PTHREAD_EXTRA_INTERNAL
+#include <assert.h>
#include <pthread.h>
#include <pthread_extra.h>
pthread_t i;
for(i = 0; i<PTHREAD_XTHREADS_MAX; i++) {
if(pthread_equal(pthread_user_data[i].tid, PTHREAD_XNULL)) {
- pthread_user_data[i].tid = thread;
+ //FIXME: Should be locking for addition to the array!!!!
pthread_user_data[i+1].tid = PTHREAD_XNULL;
+ pthread_user_data[i].tid = thread;
break;
}
if(pthread_equal(pthread_user_data[i].tid, thread)) break;
void* pthread_user_data_get(pthread_t thread) {
return *(pthread_user_data_ptr(thread));
}
+
+//Remove canceled thread from user data registry
+int pthread_user_data_remove(pthread_t thread) {
+ //FIXME: not implemented yet!
+ (void) thread;
+ return 0;
+}
+
+//User data cleanup handler to be registered with pthread_cleanup_push()
+void pthread_user_data_cleanup( void * arg ) {
+ pthread_t t = (pthread_t)arg;
+ assert(pthread_equal(t, pthread_self()) && "Pthread_self() is not working in cleanup context!");
+ pthread_user_data_remove(t);
+}