qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] tests: Disable test-bdrv-drain


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH] tests: Disable test-bdrv-drain
Date: Sun, 4 Nov 2018 23:03:53 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0

On 02/11/2018 14:33, Peter Maydell wrote:
> On 9 October 2018 at 12:16, Paolo Bonzini <address@hidden> wrote:
>> 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.
> 
> We would also need to catch exits via qemu_thread_exit(), right?
> We probably also need to handle the main thread specially, via
> atexit(). This seems to be pretty much what we already do in
> util/qemu-thread-win32.c...

There's only one caller of qemu_thread_exit and it can be removed easily.

However, an improvement on the idea is to use pthread_cleanup_push/pop
in qemu_thread_start.  This does handle qemu_thread_exit.

Thanks,

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]