From 1ae21d47f282c15a4f9fed23d3b709ff6a9c2de5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Fri, 16 Apr 2010 23:29:44 +0300 Subject: [PATCH] Avoid problems with srand() and speed up a bit (avoid dlsym) --- bin/override.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/bin/override.c b/bin/override.c index a8b0754887..02402d50ec 100644 --- a/bin/override.c +++ b/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; } -- 2.39.2