http://bugs.winehq.org/show_bug.cgi?id=28290
Summary: shell32/shelllink.ok test flaky Product: Wine Version: 1.3.27 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: shell32 AssignedTo: wine-bugs@winehq.org ReportedBy: dank@kegel.com
When running with WINEDEBUG=warn+heap (on my 32 bit i7 natty box running in low power mode, fwiw), twice I've hit the error
../../../tools/runtest -q -P wine -M shell32.dll -T ../../.. -p shell32_test.exe.so shelllink.c && touch shelllink.ok shelllink.c:728: Test failed: save failed (0x80070020) shelllink.c:728: Test failed: got 0x00000001 shelllink.c:728: Test failed: Didn't expect NULL shelllink.c:474: Test failed: GetCurFile fails on shell32 < 5.0 shelllink.c:732: Test failed: GetDescription returned 'command on path' instead of 'command on path without .exe'
This test keeps overwriting the same file with new data, iirc. The previous thing it wrote was "command on path", so it looks like the immediately previous testcase sometimes leaves a reference dangling? I think 0x80070020 is "sharing violation".
https://bugs.winehq.org/show_bug.cgi?id=28290
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, testcase CC| |austinenglish@gmail.com
--- Comment #1 from Austin English austinenglish@gmail.com --- wine-1.7.36-145-ga1459aa
I ran this 25 times, no problem. Kicked it up to 1000, failed on try 56: shelllink.c:769: Test failed: save failed (0x80070020) shelllink.c:769: Test failed: got 0x00000001 shelllink.c:769: Test failed: Didn't expect NULL shelllink.c:464: Test failed: GetCurFile fails on shell32 < 5.0 shelllink.c:771: Test failed: GetIconLocation returned 'C:\users\austin\Temp\test.txt' instead of 'C:\users\austin\Temp\test.txt'
adding +shell, and it failed on try 2. I'll attach the log.
https://bugs.winehq.org/show_bug.cgi?id=28290
--- Comment #2 from Austin English austinenglish@gmail.com --- Created attachment 50782 --> https://bugs.winehq.org/attachment.cgi?id=50782 warn+heap,+shell trace
https://bugs.winehq.org/show_bug.cgi?id=28290
François Gouget fgouget@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords|download |source CC| |fgouget@codeweavers.com Summary|shell32/shelllink.ok test |shell32:shelllink test |flaky |flaky
https://bugs.winehq.org/show_bug.cgi?id=28290
Bernhard Übelacker bernhardu@mailbox.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |bernhardu@mailbox.org
--- Comment #3 from Bernhard Übelacker bernhardu@mailbox.org --- I tried to take a deeper look and it looks like the IPersistFile_fnSave is failing before the crash, because of SHCreateStreamOnFileW - SHCreateStreamOnFileEx - CreateFileW is returning STATUS_SHARING_VIOLATION/ERROR_SHARING_VIOLATION.
This looks like a result of several processes "winemenubuilder.exe -w" get started which take way longer than the individual tests and one of them happens to have the test.lnk file exclusively opened while the test also wants to open test.lnk again.
A sledge hammer might be to "WaitForSingleObject( pi.hProcess..." after the "CreateProcessW" in run_winemenubuilder in shelllink.c:327. At least with this the crash did not happen in a tight loop of 100 test runs, which produced in the range of 4 failures without the syncronisation.
Or maybe should SHCreateStreamOnFileEx make more attempts to open the file in the hope winemenubuilder finished later?
https://bugs.winehq.org/show_bug.cgi?id=28290
François Gouget fgouget@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|shell32:shelllink test |shell32:shelllink - |flaky |test_load_save() crashes | |randomly in Wine
https://bugs.winehq.org/show_bug.cgi?id=28290
--- Comment #4 from François Gouget fgouget@codeweavers.com --- These crashes are still happening and the create_lnk() call that leads to the crash is not not always the same. That's consistent with the analysis in comment 3. Here are the current traces:
shelllink.c:775: Test failed: save(path, TRUE) failed (0x80070020) shelllink.c:775: Test failed: dirty(path, TRUE) (0x00000000) shelllink.c:775: Test failed: GetCurFile(path, TRUE) got 0x00000001 shelllink.c:775: Test failed: GetCurFile(path, TRUE) Didn't expect NULL Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x6a2e938d).
https://bugs.winehq.org/show_bug.cgi?id=28290
François Gouget fgouget@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED Fixed by SHA1| |f49a30167a945062e197dcbd884 | |8c9f46ef3da26
--- Comment #5 from François Gouget fgouget@codeweavers.com --- shell32:shelllink stil crashes but in a different place. The last known instance of this failure happened on 2022-08-16 on fgtb-debian11-wow32 and was fixed by the commit below:
commit f49a30167a945062e197dcbd8848c9f46ef3da26 Author: Alexandre Julliard julliard@winehq.org Date: Thu Sep 1 15:59:41 2022 +0200
shell32: Fix sharing modes when loading/saving link files.
https://bugs.winehq.org/show_bug.cgi?id=28290
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #6 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 8.0-rc1.