Revert my earlier CRYPTO_THREADID commit, I will commit a reworked
[openssl.git] / crypto / rand / md_rand.c
index 59535b9e7086ccac3ab57dd19752e0db9034b381..cfc78774f72fed7b76689983097a4366cd955a8e 100644 (file)
@@ -145,7 +145,8 @@ static unsigned int crypto_lock_rand = 0; /* may be set only when a thread
                                            * holds CRYPTO_LOCK_RAND
                                            * (to prevent double locking) */
 /* access to lockin_thread is synchronized by CRYPTO_LOCK_RAND2 */
-static CRYPTO_THREADID locking_tid;
+static unsigned long locking_thread_id = 0; /* valid iff crypto_lock_rand is set */
+static void *locking_thread_idptr = NULL; /* valid iff crypto_lock_rand is set */
 
 
 #ifdef PREDICT
@@ -213,10 +214,8 @@ static void ssleay_rand_add(const void *buf, int num, double add)
        /* check if we already have the lock */
        if (crypto_lock_rand)
                {
-               CRYPTO_THREADID tid;
-               CRYPTO_THREADID_set(&tid);
                CRYPTO_r_lock(CRYPTO_LOCK_RAND2);
-               do_not_lock = !CRYPTO_THREADID_cmp(&locking_tid, &tid);
+               do_not_lock = (locking_thread_id == CRYPTO_thread_id()) && (locking_thread_idptr == CRYPTO_thread_idptr());
                CRYPTO_r_unlock(CRYPTO_LOCK_RAND2);
                }
        else
@@ -374,7 +373,8 @@ static int ssleay_rand_bytes(unsigned char *buf, int num)
 
        /* prevent ssleay_rand_bytes() from trying to obtain the lock again */
        CRYPTO_w_lock(CRYPTO_LOCK_RAND2);
-       CRYPTO_THREADID_set(&locking_tid);
+       locking_thread_id = CRYPTO_thread_id();
+       locking_thread_idptr = CRYPTO_thread_idptr();
        CRYPTO_w_unlock(CRYPTO_LOCK_RAND2);
        crypto_lock_rand = 1;
 
@@ -536,10 +536,8 @@ static int ssleay_rand_status(void)
         * (could happen if a RAND_poll() implementation calls RAND_status()) */
        if (crypto_lock_rand)
                {
-               CRYPTO_THREADID tid;
-               CRYPTO_THREADID_set(&tid);
                CRYPTO_r_lock(CRYPTO_LOCK_RAND2);
-               do_not_lock = !CRYPTO_THREADID_cmp(&locking_tid, &tid);
+               do_not_lock = (locking_thread_id == CRYPTO_thread_id()) && (locking_thread_idptr == CRYPTO_thread_idptr());
                CRYPTO_r_unlock(CRYPTO_LOCK_RAND2);
                }
        else
@@ -551,7 +549,8 @@ static int ssleay_rand_status(void)
                
                /* prevent ssleay_rand_bytes() from trying to obtain the lock again */
                CRYPTO_w_lock(CRYPTO_LOCK_RAND2);
-               CRYPTO_THREADID_set(&locking_tid);
+               locking_thread_id = CRYPTO_thread_id();
+               locking_thread_idptr = CRYPTO_thread_idptr();
                CRYPTO_w_unlock(CRYPTO_LOCK_RAND2);
                crypto_lock_rand = 1;
                }