(2010/12/10 5:14), Rainer Schuetze wrote:
A DLL gets notified in its entrypoint DllMain about new threads. When it
receives such a notification, it mainly does the following:
if( !thread_findByAddr( GetCurrentThreadId() ) )
thread_attachThis();
if( !_moduleinfo_tlsdtors_i ) // avoid duplicate calls
_moduleTlsCtor();
You might want to try inserting this snippet into your callback.
Rainer
Thank you!
$ type a.d
import win32.windows;
import win32.mmsystem;
import std.stdio;
import core.thread;
extern (Windows)
void waveInProc(in HWAVEIN handle, in uint message, in DWORD instance,
in DWORD param1, in DWORD param2)
{
if( !thread_findByAddr( GetCurrentThreadId() ) )
thread_attachThis();
if( !_moduleinfo_tlsdtors_i ) // avoid duplicate calls
_moduleTlsCtor();
int[] a;
int[] b = a.dup;
}
...
$ bud a /Ldetailedmap -g -full
...
$ ddbg a
-> r
...
Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at
gc.gcx.Gcx.__invariant src\gc\gcx.d:1553 (0x0041e507) thread(6136)
->q
Ummm...?