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

Reply via email to