Commit 6cb7a7be authored by Drew Jetter's avatar Drew Jetter Committed by Alexander Smorkalov

Fixed bug #3489: The code assumed that two global variables would be constructed…

Fixed bug #3489: The code assumed that two global variables would be constructed in a particular order, but global variable initialization order is compiler-dependent.
(cherry picked from commit 6bf599b1)
parent cdea6b53
......@@ -1129,17 +1129,24 @@ public:
}
}
};
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;
}
......@@ -1164,7 +1171,7 @@ TLSStorage::~TLSStorage()
void*& data = tlsData_[i];
if (data)
{
tlsContainerStorage.destroyData(i, data);
getTLSContainerStorage().destroyData(i, data);
data = NULL;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment