}
}
};
-static TLSContainerStorage tlsContainerStorage;
+
+// This is a wrapper function that will ensure 'tlsContainerStorage' is constructed on first use.
+// For more information: http://www.parashift.com/c++-faq/static-init-order-on-first-use.html
+static TLSContainerStorage& getTLSContainerStorage()
+{
+ static TLSContainerStorage *tlsContainerStorage = new TLSContainerStorage();
+ return *tlsContainerStorage;
+}
TLSDataContainer::TLSDataContainer()
: key_(-1)
{
- key_ = tlsContainerStorage.allocateKey(this);
+ key_ = getTLSContainerStorage().allocateKey(this);
}
TLSDataContainer::~TLSDataContainer()
{
- tlsContainerStorage.releaseKey(key_, this);
+ getTLSContainerStorage().releaseKey(key_, this);
key_ = -1;
}
void*& data = tlsData_[i];
if (data)
{
- tlsContainerStorage.destroyData(i, data);
+ getTLSContainerStorage().destroyData(i, data);
data = NULL;
}
}