@ -1131,17 +1131,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 ( )
TLSDataContainer : : TLSDataContainer ( )
: key_ ( - 1 )
: key_ ( - 1 )
{
{
key_ = tlsContainerStorage . allocateKey ( this ) ;
key_ = getTLSContainerStorage ( ) . allocateKey ( this ) ;
}
}
TLSDataContainer : : ~ TLSDataContainer ( )
TLSDataContainer : : ~ TLSDataContainer ( )
{
{
tlsContainerStorage . releaseKey ( key_ , this ) ;
getTLSContainerStorage ( ) . releaseKey ( key_ , this ) ;
key_ = - 1 ;
key_ = - 1 ;
}
}
@ -1166,7 +1173,7 @@ TLSStorage::~TLSStorage()
void * & data = tlsData_ [ i ] ;
void * & data = tlsData_ [ i ] ;
if ( data )
if ( data )
{
{
tlsContainerStorage . destroyData ( i , data ) ;
getTLSContainerStorage ( ) . destroyData ( i , data ) ;
data = NULL ;
data = NULL ;
}
}
}
}