diff options
author | Bodo Möller <bodo@openssl.org> | 2006-06-16 01:00:47 +0000 |
---|---|---|
committer | Bodo Möller <bodo@openssl.org> | 2006-06-16 01:00:47 +0000 |
commit | 4584eccea00d6910770a7ce1a9719b051c01ae8f (patch) | |
tree | cd84875cb770b302e303366269a48dc0bfb132ba /crypto | |
parent | ed3ecd801e4f55f51a63236160b3093e24770724 (diff) |
another thread-safety fix
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/bn/bn_mont.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/crypto/bn/bn_mont.c b/crypto/bn/bn_mont.c index b532305b80..a4612d6639 100644 --- a/crypto/bn/bn_mont.c +++ b/crypto/bn/bn_mont.c @@ -481,6 +481,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; + BN_MONT_CTX *ret; CRYPTO_r_lock(lock); if (!*pmont) @@ -491,19 +492,20 @@ BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, 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 - *pmont = mtmp; + *pmont = ret; } } + ret = *pmont; + if (got_write_lock) CRYPTO_w_unlock(lock); else CRYPTO_r_unlock(lock); - return *pmont; + return ret; } |