https://bugs.winehq.org/show_bug.cgi?id=50424
Bug ID: 50424 Summary: std::mutex crashes on creation Product: Wine Version: 4.12.1 Hardware: arm OS: Linux Status: UNCONFIRMED Severity: major Priority: P2 Component: msvcp Assignee: wine-bugs@winehq.org Reporter: david.paradis@us.abb.com Distribution: ---
Created attachment 69041 --> https://bugs.winehq.org/attachment.cgi?id=69041 Test Project File
I have spent the better half of the last month tracking down a crash in my application related to the creation of the std::mutex object in my code. After putting many debugging messages into the Wine code I have finally found what the issue is. Here is what I have found: 1) In the dlls/msvcp90/msvcp_main.c:init_cxx_funcs() the code is calling GetProcAddress() for the critical_section methods for ctor, dtor, lock, ... but never checks to see if we found a valid address for the functions. Later on in the _Mtx_init_in_situ() a call is made to the critical section ctor and throws null pointer exceptions because the function pointer is null.
2) In the dlls/concrt140/concrt140.spec there are NO definitions for any ARM architecture method exports. In the dlls/msvcp90/msvcp90.spec there are definitions but they are missing in concrt library.
After playing with the concrt140.spec file I was able add the 5 critical section method exports to the file and was able to verify that I can now create a std::mutex object and call lock, unlock and other methods on it successfully.
At this point I have no idea how many other ARM methods are missing from the concrt140.spec list, but the distribution package does not have ANY ARM definitions in that file.
I am attaching a very simple test CPP file that I was using to verify that the code is now working for my usage but not completely fixed. With the test code and the shipping source code you will not get past the point of seeing the second printf statement after creating the test class, it will crash on the "test t1;" line.
Thank you