Another thread-safety fix
authorBodo Möller <bodo@openssl.org>
Fri, 16 Jun 2006 01:01:14 +0000 (01:01 +0000)
committerBodo Möller <bodo@openssl.org>
Fri, 16 Jun 2006 01:01:14 +0000 (01:01 +0000)
crypto/bn/bn_mont.c

index 153f8d8e0015d6d1242c38da434379dfbf509ce3..961ca67ea1f586792186d965539c46fd96914f97 100644 (file)
@@ -407,6 +407,7 @@ BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
                                        const BIGNUM *mod, BN_CTX *ctx)
        {
        int got_write_lock = 0;
                                        const BIGNUM *mod, BN_CTX *ctx)
        {
        int got_write_lock = 0;
+       BN_MONT_CTX *ret;
 
        CRYPTO_r_lock(lock);
        if (!*pmont)
 
        CRYPTO_r_lock(lock);
        if (!*pmont)
@@ -417,19 +418,20 @@ BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
 
                if (!*pmont)
                        {
 
                if (!*pmont)
                        {
-                       BN_MONT_CTX *mtmp;
-                       mtmp = BN_MONT_CTX_new();
-                       if (mtmp && !BN_MONT_CTX_set(mtmp, mod, ctx))
-                               BN_MONT_CTX_free(mtmp);
+                       ret = BN_MONT_CTX_new();
+                       if (ret && !BN_MONT_CTX_set(ret, mod, ctx))
+                               BN_MONT_CTX_free(ret);
                        else
                        else
-                               *pmont = mtmp;
+                               *pmont = ret;
                        }
                }
        
                        }
                }
        
+       ret = *pmont;
+       
        if (got_write_lock)
                CRYPTO_w_unlock(lock);
        else
                CRYPTO_r_unlock(lock);
                
        if (got_write_lock)
                CRYPTO_w_unlock(lock);
        else
                CRYPTO_r_unlock(lock);
                
-       return *pmont;
+       return ret;
        }
        }