On 01/12/2013 05:21 PM, Dan Kegel wrote:
The library in question is using static vc runtime linkage, so _getptd() is linked in
That's somewhat worrisome. So you have multiple instances of the C runtime library active in the same app?
Maybe you're not unloading that dll gracefully enough.
Might be heap corruption. I wonder if Valgrind might be helpful.
I second the suggestion to post a minimal testcase.
Here's a link to a zip file that includes the prebuilt .exe and .dll windows binaries that crash in wine. Plus the code.
https://dl.dropbox.com/u/97386125/msvcrt-dll-problem.zip
So, again, the bug is that MSVCRT calls are failing when called from a DLL that has been reloaded. If the calls come from a thread and if the DLL is built with static MSVCRT runtimes.
There is no crash for the program in Windows.
I also tried rebuilding the code for winelib, and it doesn't appear to have the same behavior. So the problem doesn't happen if Wine's MSVCRT is used, only if a windows DLL that uses static MSVCRT linkage is reloaded.
Thanks -- mo