[PATCH] quartz: Increment reference count for the advise thread to avoid crashes caused by DLL unloading.

粟田大樹 castaneai at by.black
Tue Aug 10 18:40:03 CDT 2021


Hi, Zebediah. Thank you for your quick reply.

It was a very interesting problem and I logged the changes in object_locks.
In my tests, object_locks goes to 0 without system_clock_inner_Release
being called.
The game I tested does not have a free version, so I apologize for not
sharing it. The game is clickable to skip video playback, and the crash
occurs when clicking.

I have attached the log of my test for your reference. Thank you,

2021年8月11日(水) 7:52 Zebediah Figura (she/her) <zfigura at codeweavers.com>:

> Hello Hiroki, thanks for the patch!
>
> On 8/10/21 5:38 PM, Hiroki Awata wrote:
> > Some games crash when the DLL is unloaded during
> SleepConditionVariableCS on SystemClockAdviseThread.
> > This is due to the fact that DllCanUnloadNow returns S_OK even though
> the advise thread is running.
> > Incrementing the reference count when creating the advise thread
> resolves it.
>
> This doesn't seem right; the system clock object itself should be
> holding a reference [added by DSCF_CreateInstance(), removed by
> system_clock_inner_Release()] and waits for the thread to stop before
> removing it. Are you sure we're not leaking a reference elsewhere?
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20210811/b6441616/attachment-0001.htm>
-------------- next part --------------
0024:trace:quartz:DSCF_CreateInstance --- ({00000000-0000-0000-c000-000000000046}) increment object_locks: 1
0024:trace:quartz:DSCF_CreateInstance --- ({56a868a9-0ad4-11ce-b03a-0020af0ba770}) increment object_locks: 2
0024:trace:quartz:DSCF_CreateInstance --- ({56a86895-0ad4-11ce-b03a-0020af0ba770}) increment object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 4
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 3
0110:trace:quartz:DSCF_CreateInstance --- ({00000000-0000-0000-c000-000000000046}) increment object_locks: 4
0024:trace:quartz:vmr_free --- (vmr9) decrement object_locks: 3
0110:trace:quartz:DSCF_CreateInstance --- ({00000000-0000-0000-c000-000000000046}) increment object_locks: 4
0024:trace:quartz:DSCF_CreateInstance --- ({56a8689c-0ad4-11ce-b03a-0020af0ba770}) increment object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0110:trace:quartz:DSCF_CreateInstance --- ({00000000-0000-0000-c000-000000000046}) increment object_locks: 6
0024:trace:quartz:acm_wrapper_destroy --- (acmwrapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0024:trace:quartz:DSCF_CreateInstance --- ({97f7c4d4-547b-4a5f-8332-536430ad2e4d}) increment object_locks: 6
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 5
0110:trace:quartz:DSCF_CreateInstance --- ({00000000-0000-0000-c000-000000000046}) increment object_locks: 6
0024:trace:quartz:DSCF_CreateInstance --- ({56a8689c-0ad4-11ce-b03a-0020af0ba770}) increment object_locks: 7
0144:trace:quartz:SystemClockImpl_AdviseTime ----- clock 00279E40, base 45925.803, offset 0.3819555, event 0x22c, cookie 030CFD44.
0024:trace:quartz:StdMemAllocator_Destroy --- (memallocator) decrement object_locks: 6
0024:trace:quartz:video_renderer_destroy --- (videorenderer) decrement object_locks: 5
0024:trace:quartz:StdMemAllocator_Destroy --- (memallocator) decrement object_locks: 4
0024:trace:quartz:dsound_render_destroy --- (dsoundrenderer) decrement object_locks: 3
0024:trace:quartz:async_reader_destroy --- (filesource) decrement object_locks: 2
0024:trace:quartz:Inner_Release --- (filtermapper) decrement object_locks: 1
0024:trace:quartz:FilterGraphInner_Release --- (filtergraph) decrement object_locks: 0


More information about the wine-devel mailing list