[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH] tests: Disable test-bdrv-drain
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-block] [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