fixed repeated allocation of RNG on each theRNG() call (thanks to barjenbr for the patch)

This commit is contained in:
Vadim Pisarevsky 2011-04-26 12:20:42 +00:00
parent 0cfcb48796
commit 4b2f9e78fc

View File

@ -689,19 +689,22 @@ RNG& theRNG()
#else
static pthread_key_t tlsRNGKey = 0;
static pthread_once_t tlsRNGKeyOnce = PTHREAD_ONCE_INIT;
static void deleteRNG(void* data)
{
delete (RNG*)data;
}
static void makeRNGKey()
{
int errcode = pthread_key_create(&tlsRNGKey, deleteRNG);
CV_Assert(errcode == 0);
}
RNG& theRNG()
{
if( !tlsRNGKey )
{
int errcode = pthread_key_create(&tlsRNGKey, deleteRNG);
CV_Assert(errcode == 0);
}
pthread_once(&tlsRNGKeyOnce, makeRNGKey);
RNG* rng = (RNG*)pthread_getspecific(tlsRNGKey);
if( !rng )
{