[Bug 59771] New: TrackChecker-x64.exe hangs at 100% CPU on startup since Wine 11.7 (msxml3 regression)
http://bugs.winehq.org/show_bug.cgi?id=59771 Bug ID: 59771 Summary: TrackChecker-x64.exe hangs at 100% CPU on startup since Wine 11.7 (msxml3 regression) Product: Wine Version: 11.9 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: msxml3 Assignee: wine-bugs@list.winehq.org Reporter: alfrlr@gmail.com Distribution: --- Created attachment 80978 --> http://bugs.winehq.org/attachment.cgi?id=80978 Wine debug output (err+all,warn-all) with builtin msxml3. Shows fixme:msxml:domdoc_get_parseError calls immediately before the process enters 100% CPU infinite recursion loop. Process was killed after TrackChecker (https://trackchecker.net), a 64-bit Windows application (PE32+ x86-64, subsystem 6.00), worked correctly under Wine Staging 11.6 but hangs at 100% CPU with no window since Wine 11.7. The process never terminates on its own and must be killed. Regression introduced: Wine 11.7 ("Beginnings of MSXML reimplementation without libxml2") Last working version: Wine Staging 11.6 Prefix setup: WINEARCH=win64 wineboot winetricks vcrun2013 winetricks oleaut32 winetricks comctl32 Windows version in prefix: 6.1 (Win 7), confirmed via: wine reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion Note: these components may not be necessary to trigger the bug. They reflect the tested configuration. Steps to reproduce: Create a win64 WINEPREFIX with the setup above Copy TrackChecker-x64.exe and its data files (including data.xml, ~3.4MB) into C:\TrackChecker\ Run: wine "C:\\TrackChecker\\TrackChecker-x64.exe" Expected: Application window appears Actual: Process spins at 100% CPU indefinitely, no window is created, must be killed manually Technical analysis: With WINEDEBUG=err+all, the last msxml activity logged before the spin begins: fixme:msxml:domdoc_get_parseError ... semi-stub fixme:msxml:domdoc_get_parseError ... semi-stub fixme:msxml:domdoc_get_parseError ... semi-stub strace attached to the spinning process shows a continuous tight loop of Wine's stack growth handler: rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT USR1 USR2 ALRM CHLD IO], [], 8) = 0 mprotect(0xc3e0000, 65536, PROT_READ|PROT_WRITE) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT USR1 USR2 ALRM CHLD IO], [], 8) = 0 mprotect(0xc3f0000, 65536, PROT_READ|PROT_WRITE) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 ... This pattern (mprotect on incrementing addresses) is Wine's guard page expansion firing continuously — definitive infinite recursion consuming the entire stack. /proc/<pid>/wchan = 0 — the process is spinning entirely in userspace, never blocking. The application uses CoCreateInstance on CLSID {f6d90f11-9c73-11d3-b32e-00c04f990bb4} (DOMDocument30 / msxml3) to parse its data.xml configuration file at startup. The COM class is correctly registered in the prefix. Attempting to use native msxml3 (both via winetricks and by manually copying a genuine 64-bit msxml3.dll from a Windows 10 installation) did not resolve the issue: winetricks msxml3 installs only a 32-bit DLL which cannot load in a 64-bit process, and the Windows 10 native 64-bit DLL fails to load in Wine due to unresolved dependencies. A related regression (PLSQL Developer failing to start on Wine 11.7, also msxml3-related) was fixed in Wine 11.8, but TrackChecker's code path is not covered by that fix and remains broken in Wine 11.9. Workaround: Using Wine Staging 11.6 resolves the issue completely. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #1 from alfrlr@gmail.com --- Created attachment 80979 --> http://bugs.winehq.org/attachment.cgi?id=80979 Wine debug output with native msxml3 override set (64-bit msxml3.dll copied from Windows 10 System32) Shows OLE errors: apartment_add_dll couldn't load in-process dll, class {f6d90f11-9c73-11d3-b32e-00c04f990bb4} not registered. Native DLL fails to load, app exits with error dialog. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #2 from Nikolay Sivov <bunglehead@gmail.com> --- Does it work for you if you do a new installation, in a clean wineprefix? I don't see any problems with it, it starts up fine for me. Parsing errors are from "parsing" file at \\AppData\\Roaming\\TrackChecker\\services.dat, which is not an xml file. --- Create a win64 WINEPREFIX with the setup above Copy TrackChecker-x64.exe and its data files (including data.xml, ~3.4MB) into C:\TrackChecker\ Run: wine "C:\\TrackChecker\\TrackChecker-x64.exe" --- Why would you do that? If it's installed, it should be run from installation directory. Let's focus on reproducing this first, we'll need exact steps, when using freshly installed application. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #3 from fumadordeducados@gmail.com --- (In reply to Nikolay Sivov from comment #2)
Does it work for you if you do a new installation, in a clean wineprefix? I don't see any problems with it, it starts up fine for me.
Parsing errors are from "parsing" file at \\AppData\\Roaming\\TrackChecker\\services.dat, which is not an xml file.
--- Create a win64 WINEPREFIX with the setup above Copy TrackChecker-x64.exe and its data files (including data.xml, ~3.4MB) into C:\TrackChecker\ Run: wine "C:\\TrackChecker\\TrackChecker-x64.exe" ---
Why would you do that? If it's installed, it should be run from installation directory.
Let's focus on reproducing this first, we'll need exact steps, when using freshly installed application.
Not working in a clean prefix. Reporting prefix setup just for info. I was using these winetricks setup because they make a calendar control in the app workable, but you'll hit the bug right away on a clean installation in a vanilla prefix. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #4 from fumadordeducados@gmail.com --- Regarding the installation method: i'm running it from a manually copied directory because the app was already set up from a previous Windows installation. Will reproduce using the official installer on a clean prefix and update the report. Tested with a fresh installation using the official installer on a clean win64 WINEPREFIX (no prior data, no manually copied files). The bug reproduces identically: Installer run via: wine explorer /desktop=TC,1280x960 TrackChecker-setup.exe (because the license is not scrollable otherwise and the "Accept" button cannot be enabled) Launched via: wine "C:\\Program Files\\TrackChecker\\TrackChecker.exe" Result: process immediately goes to ~100% CPU, no window created, must be killed Last debug output before spin: three consecutive fixme:msxml:domdoc_get_parseError ... semi-stub calls, identical to original report -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #5 from fumadordeducados@gmail.com --- Further testing: A fresh installation on a clean win64 WINEPREFIX with no prior tracking data starts correctly after letting it run a bit longer. It seems that the bug is triggered by existing user data. The original setup used a "portable" mode (empty file named portable in the installation directory), which causes TrackChecker to store its data locally rather than in AppData. This includes data.xml (~3.4MB, containing hundreds of accumulated tracking entries) Copying only data.xml (~3.4MB, containing hundreds of accumulated tracking entries) into a fresh portable-mode installation reproduces the bug immediately. The three domdoc_get_parseError semi-stub calls become six (two DOMDocument objects being parsed), then the process enters 100% CPU infinite recursion. Without data.xml (fresh install, no data): starts correctly. With data.xml present: hangs at ~100% CPU, no window. The root cause is likely specific content or structure in data.xml that triggers a code path in Wine 11.7+'s new MSXML reimplementation that was handled correctly in Wine 11.6. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #6 from fumadordeducados@gmail.com --- Further findings: The recursion is not infinite. A minimal fake data.xml (6 entries) loads successfully but noticeably slowly. The real data.xml (~24,000 tracking entries, 3.4MB) causes a stack overflow crash — the process runs at ~100% CPU with Wine continuously growing the thread stack (visible in strace as repeated mprotect calls on incrementing addresses), then terminates. Wine 11.6 with libxml2 parsed the same file instantly with no issues. This indicates a severe performance regression in Wine 11.7+'s new MSXML implementation — likely O(n²) or worse complexity when parsing large XML files, compared to Wine 11.6 (which used libxml2 and loaded the same file instantly). A minimal reproducer data.xml with fictional data is attached. To reproduce the stack overflow crash, a large data.xml with thousands of entries is needed. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #7 from fumadordeducados@gmail.com --- Created attachment 80980 --> http://bugs.winehq.org/attachment.cgi?id=80980 Test data.xml -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 --- Comment #8 from Nikolay Sivov <bunglehead@gmail.com> --- Thank you for the test file. It doesn't really hang, but takes a very long time to process queries. Even for this small file application makes ~1800 selectSingleNode() calls. This was implemented very inefficiently recently, but is now replaced with another implementation (see https://gitlab.winehq.org/wine/wine/-/merge_requests/10938). With current Wine application starts much faster for me. So please test with current wine (from git), or wait for the next release 11.10. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 Nikolay Sivov <bunglehead@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |regression Resolution|--- |FIXED Fixed by SHA1| |c23cbae37a768356ba61294f8a8 | |247d0eb090f3c Status|UNCONFIRMED |RESOLVED --- Comment #9 from Nikolay Sivov <bunglehead@gmail.com> --- Marking fixed, c23cbae37a768356ba61294f8a8247d0eb090f3c. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 Nikolay Sivov <bunglehead@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Regression SHA1| |21735ee8342e24fedc5d372d155 | |76152b74e08d7 -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=59771 Alexandre Julliard <julliard@winehq.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED --- Comment #10 from Alexandre Julliard <julliard@winehq.org> --- Closing bugs fixed in 11.10. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
participants (1)
-
WineHQ Bugzilla