When modules are initialized, druntime will first run the module initializers before running the module tls initializers ignoring the dependencies between the modules. This will lead to a access of a unitialized module if the module ctor of one module uses tls data of another module. Example:

module a:

class TLSStuff
{
  public int i;
}

TLSStuff g_tlsStuff;

static this()
{
  g_tlsStuff = new TLSStuff();
}

module b:
import a;

shared static this()
{
  g_tlsStuff.i++; //null pointer access
}

Is this a bug, or is this intended beahvior? I always believed that with all the dependency detenction that is done such situation should not happen.

Kind Regards
Benjamin Thaut

Reply via email to