I forgot one more thing: I don't know how juno deals with it, but I
consider the default memory management of COM objects in phobos/druntime
rather unusable. It leaks memory and can easily cause garbage collection
on objects still referenced by COM objects. That's why I use
http://d.puremagic.com/issues/show_bug.cgi?id=4092
Rainer
Richard Webb wrote:
I assume that you do quite a lot of initialization for TLS
I'm not directly, but Juno has a number of static class constructors that
allocate
static members, and Outlook creates lots of threads (for example, i see the
static
constructor of the module juno.com.core get called 20+ times on startup).
The Juno lib predates the TLS changes in D2 so i guess that some of these static
variables don't need to be thread local, but i haven't had chance to
investigate that.
Are you using callbacks into the C++ DLL from the module ctors
The D dll just exports a couple of 'C' functions that the C++ dll calls. There
are
no calls in the other direction.
that might work better if the C++ part also uses thread local storage
The C++ dll uses ATL for it's COM stuff, and i'm not sure what that does with
TLS
in the background.
I'll try your suggested change tommorow.
Thanks,
Richard Webb