Browse Source

Avoid problems with srand() and speed up a bit (avoid dlsym)

pull/2/head
Rémi Denis-Courmont 16 years ago
parent
commit
1ae21d47f2
  1. 18
      bin/override.c

18
bin/override.c

@ -148,24 +148,28 @@ int unsetenv (const char *name)
* preserve reproducibility of the number sequence (which usually does not
* matter).
**/
static pthread_mutex_t prng_lock = PTHREAD_MUTEX_INITIALIZER;
static struct
{
pthread_mutex_t lock;
unsigned int seed;
} prng = { PTHREAD_MUTEX_INITIALIZER, 0, };
void srand (unsigned int seed)
{
pthread_mutex_lock (&prng_lock);
pthread_mutex_lock (&prng.lock);
LOG("Warning", "%d", seed);
CALL(srand, seed);
pthread_mutex_unlock (&prng_lock);
prng.seed = seed;
pthread_mutex_unlock (&prng.lock);
}
int rand (void)
{
int ret;
pthread_mutex_lock (&prng_lock);
pthread_mutex_lock (&prng.lock);
LOG("Warning", "");
ret = CALL(rand);
pthread_mutex_unlock (&prng_lock);
ret = rand_r (&prng.seed);
pthread_mutex_unlock (&prng.lock);
return ret;
}

Loading…
Cancel
Save