So I've implemented a minimal solution that works for my use case. First this is the new public API, which can be used to register a thread cleanup callback function:
/** * type of a callback function that will be called when a thread exits. * Use the fridgethr_register_thread_cleanup_cb() function to register * the callback function *for each thread* you want it called at * thread exit. */ typedef void (*thread_cleanup_cb) (void*); /** * register a callback function that will be called when the current thread exits. * * You can only register a callback function once per thread for each * unique param value. Subsequent calls of this function with the * same value for cb and param will not register additional callbacks. * * @param cb pointer to callback function. * @param param parameter that will be passed to cb. */ void fridgethr_register_thread_cleanup_cb(thread_cleanup_cb cb, void *param); This feature is implemented with a linked list with the nodes containing the thread_cleanup_cb pointer and the param pointer. Each thread maintains its own linked list with a thread local glist_head. A new function: /** * call every registered thread cleanup callback function. */ static void fridgethr_call_cleanup_cb(); will traverse the linked list and call every registered cleanup function. This new fridgethr_call_cleanup_cb function is called in fridgethr_start_routine() before the thread_finalize function is called. I'll do some more testing during this week, to see that my implementation is working. If you like the general idea, I'll post a review request later with my changes. -- ---> Dirk Jagdmann ----> http://cubic.org/~doj -----> http://llg.cubic.org ------------------------------------------------------------------------------ _______________________________________________ Nfs-ganesha-devel mailing list Nfs-ganesha-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel