[PATCH v2] winex11.drv: Destroy windows associated with X11 display when the display is closed.
Rémi Bernon
rbernon at codeweavers.com
Thu Oct 14 09:12:59 CDT 2021
On 10/14/21 4:10 PM, Paul Gofman wrote:
> On 10/14/21 17:04, Rémi Bernon wrote:
>> On 10/14/21 3:56 PM, Paul Gofman wrote:
>>> Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
>>> ---
>>> Supersedes 217174.
>>>
>>> X11DRV_ThreadDetach() destroys thread data part of which
>>> (e. g., display) is still present in window data in winex11.drv
>>> and accessible through hwnd. That causes all sort of hangs
>>> and crashes when, for instance, the window is still used for Vulkan
>>> rendering (even if only to tear down the device and swapchain).
>>>
>>> dlls/winex11.drv/window.c | 66 ++++++++++++++++++++++++++++++++++
>>> dlls/winex11.drv/x11drv.h | 6 ++++
>>> dlls/winex11.drv/x11drv_main.c | 3 ++
>>> 3 files changed, 75 insertions(+)
>>>
>>
>> I think the right way to fix this is to fix the user32 window leaks,
>> as complicated and intricated as it may be. Adding another internal
>> thread window list just makes things even more complicated.
>
> My reasoning under this variant of fixing the present problem is that if
> winex11.drv can delete the display which is still used by winex11 window
> data, it is a sort of use after free winex11 bug on its own and not
> necessarily related to what user32 is doing. I am not sure winemac.drv
> has the same problem. Relying on the proper driver windows cleanup in
> winex11.drv from user32 side to avoid use after free doesn't seem right
> by itself.
>
> Apart from that, do you have any plans for resending your child window
> deletion race fixing patches? If fixing the present issue from user32
> side will be deemed the only correct way that will probably depend on
> those.
>
Sure, I'll try to clean them up and have another try. Having another
pair of eyes on them might help too :)
--
Rémi Bernon <rbernon at codeweavers.com>
More information about the wine-devel
mailing list