summaryrefslogtreecommitdiffstats
path: root/crypto/bn/bn_mont.c
diff options
context:
space:
mode:
authorBodo Möller <bodo@openssl.org>2006-06-16 01:00:47 +0000
committerBodo Möller <bodo@openssl.org>2006-06-16 01:00:47 +0000
commit4584eccea00d6910770a7ce1a9719b051c01ae8f (patch)
treecd84875cb770b302e303366269a48dc0bfb132ba /crypto/bn/bn_mont.c
parented3ecd801e4f55f51a63236160b3093e24770724 (diff)
another thread-safety fix
Diffstat (limited to 'crypto/bn/bn_mont.c')
-rw-r--r--crypto/bn/bn_mont.c14
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;
}