static ctors in shared libs

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Fri Mar 18 11:52:25 PDT 2016


On 17/03/16 21:27, bitwise wrote:
> I've been doing some work on shared libraries for OSX, and have come
> across a potential problem, which I'm not sure what to do with.
>
> Currently, when a thread is spawned, that thread calls all the TLS
> ctors, then runs the thread entry point function, and finally calls the
> TLS dtors before the thread terminates.
>
> Example, for windows:
>
> https://github.com/D-Programming-Language/druntime/blob/15a227477a344583c4748d95492703901417f4f8/src/core/thread.d#L236
>
>
> So, the question is, how do dynamic libraries interact here?
>
> Example: A dynamic library contains D modules with TLS ctors. If I start
> a few threads, and then load a dynamic library, shouldn't the TLS ctors
> in the dynamic library be called for each running thread? If my
> assumption is correct, the next question is, how do you do this?
>
> I don't think you can hijack each thread and have it run the TLS ctors,
> and you can run them all from the thread loading the shared library
> because of synchronization issues. So what's the solution? Should TLS
> ctors in dynamic libraries simply be specified not to run, or could they
> somehow be run lazily at the first TLS access in a dynamic library?
>
> Any thoughts on this would be appreciated.

How does it behave on Linux? It already supports dynamic libraries.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list