Commit 4213a133 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Work-around non-thread-safe use of the C random number generator

parent 4e1ff3a1
......@@ -41,6 +41,7 @@ void vlc_enable_override (void)
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <pthread.h>
static void vlogbug (const char *level, const char *func, const char *fmt,
va_list ap)
......@@ -116,4 +117,34 @@ int unsetenv (const char *name)
}
/*** Pseudo random numbers ***
*
* The C PRNG is not thread-safe (and generally sucks, the POSIX 48-bits PRNG
* is much better as a reproducible non-secure PRNG). To work around this, we
* force evil callers to serialize. This makes the call safe, but fails to
* preserve reproducibility of the number sequence (which usually does not
* matter).
**/
static pthread_mutex_t prng_lock = PTHREAD_MUTEX_INITIALIZER;
void srand (unsigned int seed)
{
pthread_mutex_lock (&prng_lock);
LOG("Warning", "%d", seed);
CALL(srand, seed);
pthread_mutex_unlock (&prng_lock);
}
int rand (void)
{
int ret;
pthread_mutex_lock (&prng_lock);
LOG("Warning", "");
ret = CALL(rand);
pthread_mutex_unlock (&prng_lock);
return ret;
}
#endif /* __ELF__ */
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