diff options
author | Adam Chlipala <adam@chlipala.net> | 2013-12-11 18:54:42 -0500 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2013-12-11 18:54:42 -0500 |
commit | 57fc55fafbf4d4f4b3aeb07d12eb9591da801b6e (patch) | |
tree | 6e276b0cdd07416e468a8b43bb03e9fb5f76cfaa /src/c | |
parent | 4c76d279aed3f26bebe9432afe7a0da8892ffc48 (diff) |
RAND_bytes isn't thread-safe, so wrap it with a lock
Diffstat (limited to 'src/c')
-rw-r--r-- | src/c/urweb.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c index 1201b09b..1c66e9e8 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -4023,9 +4023,13 @@ uw_Basis_unit uw_Basis_debug(uw_context ctx, uw_Basis_string s) { return uw_unit_v; } +static pthread_mutex_t rand_mutex = PTHREAD_MUTEX_INITIALIZER; + uw_Basis_int uw_Basis_rand(uw_context ctx) { uw_Basis_int ret; + pthread_mutex_lock(&rand_mutex); int r = RAND_bytes((unsigned char *)&ret, sizeof ret); + pthread_mutex_unlock(&rand_mutex); if (r) return abs(ret); |