aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/c/urweb.c
diff options
context:
space:
mode:
authorGravatar Ziv Scully <ziv@mit.edu>2015-03-27 11:26:06 -0400
committerGravatar Ziv Scully <ziv@mit.edu>2015-03-27 11:26:06 -0400
commit0b941d68e7ceba9302d57eb8083e8244602a09ce (patch)
treef74a786d667b2b1c70bb39e9a1bfb5c8f58bd5d5 /src/c/urweb.c
parentbef4dd04f19c2001561e9e889116f5a2f8905bc0 (diff)
parent8e114ff992a3e730f2eb42095267969eebf75c36 (diff)
Merge.
Diffstat (limited to 'src/c/urweb.c')
-rw-r--r--src/c/urweb.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index d01cfaa2..53344c5e 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -167,6 +167,19 @@ void *uw_init_client_data();
void uw_free_client_data(void *);
void uw_copy_client_data(void *dst, void *src);
+static pthread_mutex_t rand_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static uw_Basis_int my_rand() {
+ pthread_mutex_lock(&rand_mutex);
+ int ret, r = RAND_bytes((unsigned char *)&ret, sizeof ret);
+ pthread_mutex_unlock(&rand_mutex);
+
+ if (r)
+ return abs(ret);
+ else
+ return -1;
+}
+
static client *new_client() {
client *c;
@@ -192,7 +205,7 @@ static client *new_client() {
pthread_mutex_lock(&c->lock);
c->mode = USED;
- c->pass = rand();
+ c->pass = my_rand();
c->sock = -1;
c->last_contact = time(NULL);
uw_buffer_reset(&c->msgs);
@@ -349,8 +362,6 @@ extern void uw_global_custom();
extern void uw_init_crypto();
void uw_global_init() {
- srand(time(NULL) ^ getpid());
-
clients = malloc(0);
uw_global_custom();
@@ -4234,16 +4245,11 @@ 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);
+ int r = my_rand();
- if (r)
- return abs(ret);
+ if (r >= 0)
+ return r;
else
uw_error(ctx, FATAL, "Random number generation failed");
}