www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17326] New: 2.072 gc changes totally broke 32 bit Windows DLLs


          Issue ID: 17326
           Summary: 2.072 gc changes totally broke 32 bit Windows DLLs
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: regression
          Priority: P1
         Component: druntime
          Assignee: nobody puremagic.com
          Reporter: bugzilla digitalmars.com

How it is supposed to work is that if a program dynamically loads a DLL, then
they need to share the same GC instance. This is done by the DLL, when it
loads, calling gc_setProxy(the main program's gc instance pointer).

The DLL links in gcstub/gc.d, which contained a Proxy struct with a bunch of
fields that are pointers to functions. The equivalent is gc/gc.d.

Unfortunately, 2.072 totally revamped everything about this in gc/*, but failed
to update gcstub/gc. So now gcstub.gc_setProxy() gets sent a pointer to a
completely different interface, causing it to crash when used.

This is a disastrous bug, as it makes using D DLLs completely unusable in
Win32, and is likely the source of the common complaint that Windows DLLs do
not work.

Apr 14 2017