From 9b398ef297dd1b74527dd0afee9f59cd3f5bc33d Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Mon, 29 Feb 2016 16:57:11 +0000 Subject: Convert CRYPTO_LOCK_EC_* to new multi-threading API Reviewed-by: Matt Caswell Reviewed-by: Rich Salz --- crypto/ec/ecp_nistp224.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'crypto/ec/ecp_nistp224.c') diff --git a/crypto/ec/ecp_nistp224.c b/crypto/ec/ecp_nistp224.c index 0eea2e005d..78bdc355bd 100644 --- a/crypto/ec/ecp_nistp224.c +++ b/crypto/ec/ecp_nistp224.c @@ -231,6 +231,7 @@ static const felem gmul[2][16][3] = { struct nistp224_pre_comp_st { felem g_pre_comp[2][16][3]; int references; + CRYPTO_RWLOCK *lock; }; const EC_METHOD *EC_GFp_nistp224_method(void) @@ -1216,22 +1217,40 @@ static NISTP224_PRE_COMP *nistp224_pre_comp_new() ECerr(EC_F_NISTP224_PRE_COMP_NEW, ERR_R_MALLOC_FAILURE); return ret; } + ret->references = 1; + + ret->lock = CRYPTO_THREAD_lock_new(); + if (ret->lock == NULL) { + ECerr(EC_F_NISTP224_PRE_COMP_NEW, ERR_R_MALLOC_FAILURE); + OPENSSL_free(ret); + return NULL; + } return ret; } NISTP224_PRE_COMP *EC_nistp224_pre_comp_dup(NISTP224_PRE_COMP *p) { + int i; if (p != NULL) - CRYPTO_add(&p->references, 1, CRYPTO_LOCK_EC_PRE_COMP); + CRYPTO_atomic_add(&p->references, 1, &i, p->lock); return p; } void EC_nistp224_pre_comp_free(NISTP224_PRE_COMP *p) { - if (p == NULL - || CRYPTO_add(&p->references, -1, CRYPTO_LOCK_EC_PRE_COMP) > 0) + int i; + + if (p == NULL) + return; + + CRYPTO_atomic_add(&p->references, -1, &i, p->lock); + REF_PRINT_COUNT("EC_nistp224", x); + if (i > 0) return; + REF_ASSERT_ISNT(i < 0); + + CRYPTO_THREAD_lock_free(p->lock); OPENSSL_free(p); } -- cgit v1.2.3