https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101933

            Bug ID: 101933
           Summary: Unloaded dll with global std::mutex causes exe to
                    crash on exit #38
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mailnew4ster at gmail dot com
  Target Milestone: ---

Reproduction on Windows:

Create and compile dll.cc as following:

```
#include <mutex>
std::mutex x;
```

g++.exe dll.cc -shared -o test.dll

Create and compile exe.cc as following:

```
#include <windows.h>
int main()
{
    auto x = LoadLibrary("test.dll");
    MessageBox(0,0,0,0);
    FreeLibrary(x);
    MessageBox(0,0,0,0);
    return 0;
}
```

g++.exe exe.cc -o test.exe

Run test.exe and observe a crash after seeing both message boxes.
The crash happens in msvcrt.doexit, which tries to call a cleanup function
inside the dll which was already freed.

I'm using TDM-GCC, and I also reported the issue there:
https://github.com/jmeubank/tdm-gcc/issues/38

I'm not sure whether it's specific to TDM-GCC, it applies some patches on GCC,
but they are very small and I think they probably don't affect this issue.

Reply via email to