[PATCH] server: Use a free list for unallocated object handles.

Zebediah Figura zfigura at codeweavers.com
Tue Feb 15 16:15:51 CST 2022


On 2/1/22 14:56, Zebediah Figura wrote:
> On 2/1/22 13:54, Alexandre Julliard wrote:
>> Zebediah Figura <zfigura at codeweavers.com> writes:
>>
>>> The Legend of Heroes: Trails of Cold Steel III suffers from an application bug,
>>> where it tries to wait on a handle after closing it. Because of the usage
>>> patterns of the game and the way Wine allocates handles, the handle is usually
>>> reused by a separate object, which is effectively never signaled, resulting in a
>>> hang.
>>>
>>> This patch changes our handle allocation strategy to resemble Windows, and in
>>> the process makes the race much less likely, although still theoretically
>>> possible.
>>
>> Some tests would be nice.
>>
> 
> That may be difficult. When I was testing this manually I ran into
> hiccups due to some background thread in the process opening or closing
> handles.
> 

I tried writing tests for this along the following lines: allocate a 
large number of handles, close them all, then allocate the same number 
and check that they're allocated in the reverse order.

Sometimes (depending on timing, and perhaps also Windows version?) the 
tests pass with flying colours. But sometimes they fail, and fail quite 
randomly at that. Sometimes it's clear that one or two handles were 
allocated out of order, as if another thread allocated and/or freed 
them, but sometimes it seems like hundreds are. Perhaps that's evidence 
that Windows isn't quite using a free list for handle allocation the way 
this patch has it, but the fact that it at least sometimes passes makes 
me think it is.



More information about the wine-devel mailing list