On 08/10/2018 18:40, Kevin Wolf wrote: >> >> I'm pretty confident this analysis of the problem is correct: >> unfortunately I have no idea what the right way to fix it is... > Yes, I agree with your analysis. If __thread variables can be destructed > before pthread_key_create() destructors are called (and in particular if > the former are implemented in terms of the latter), this implies at > least two rules: > > 1. The Notfier itself can't be a TLS variable > > 2. The notifier callback can't access any TLS variables > > Of course, with these restrictions, qemu_thread_atexit_*() with its > existing API is as useless as it could be.
Yup, we have to stop using pthread_key_create. Luckily, these days there is always qemu_thread_start that wraps the thread, so we can call qemu_thread_atexit_run from there, and change exit_key to a thread-local NotifierList. Paolo