diff options
Diffstat (limited to 'src/prng/random.c')
| -rw-r--r-- | src/prng/random.c | 18 | 
1 files changed, 9 insertions, 9 deletions
| diff --git a/src/prng/random.c b/src/prng/random.c index cc5702ed..4ad62058 100644 --- a/src/prng/random.c +++ b/src/prng/random.c @@ -33,7 +33,7 @@ static int n = 31;  static int i = 3;  static int j = 0;  static uint32_t *x = init+1; -static int lock; +static int lock[2];  static uint32_t lcg31(uint32_t x) {  	return (1103515245*x + 12345) & 0x7fffffff; @@ -74,9 +74,9 @@ static void __srandom(unsigned seed) {  }  void srandom(unsigned seed) { -	LOCK(&lock); +	LOCK(lock);  	__srandom(seed); -	UNLOCK(&lock); +	UNLOCK(lock);  }  char *initstate(unsigned seed, char *state, size_t size) { @@ -84,7 +84,7 @@ char *initstate(unsigned seed, char *state, size_t size) {  	if (size < 8)  		return 0; -	LOCK(&lock); +	LOCK(lock);  	old = savestate();  	if (size < 32)  		n = 0; @@ -98,24 +98,24 @@ char *initstate(unsigned seed, char *state, size_t size) {  		n = 63;  	x = (uint32_t*)state + 1;  	__srandom(seed); -	UNLOCK(&lock); +	UNLOCK(lock);  	return old;  }  char *setstate(char *state) {  	void *old; -	LOCK(&lock); +	LOCK(lock);  	old = savestate();  	loadstate((uint32_t*)state); -	UNLOCK(&lock); +	UNLOCK(lock);  	return old;  }  long random(void) {  	long k; -	LOCK(&lock); +	LOCK(lock);  	if (n == 0) {  		k = x[0] = lcg31(x[0]);  		goto end; @@ -127,6 +127,6 @@ long random(void) {  	if (++j == n)  		j = 0;  end: -	UNLOCK(&lock); +	UNLOCK(lock);  	return k;  } | 
