diff options
author | Richard Levitte <levitte@openssl.org> | 2003-10-06 09:09:44 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2003-10-06 09:09:44 +0000 |
commit | c40b9bdefb59be7e640cd7a10bfd2fa26ea1fe7b (patch) | |
tree | 9264f58ab5c0cbe3824adc5c8ecc3883ddb1e83f /crypto | |
parent | 6895cca89d47b30708e41da5a7f86277f526cbe6 (diff) | |
download | openssl-c40b9bdefb59be7e640cd7a10bfd2fa26ea1fe7b.tar.gz |
Setting the ex_data index is unsafe in a threaded environment, so
let's wrap it with a lock.
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/comp/c_zlib.c | 9 | ||||
-rw-r--r-- | crypto/cryptlib.c | 3 | ||||
-rw-r--r-- | crypto/crypto.h | 3 |
3 files changed, 10 insertions, 5 deletions
diff --git a/crypto/comp/c_zlib.c b/crypto/comp/c_zlib.c index c3167fcead..7553a2d107 100644 --- a/crypto/comp/c_zlib.c +++ b/crypto/comp/c_zlib.c @@ -178,9 +178,12 @@ static int zlib_stateful_init(COMP_CTX *ctx) CRYPTO_new_ex_data(CRYPTO_EX_INDEX_COMP,ctx,&ctx->ex_data); if (zlib_stateful_ex_idx == -1) { - zlib_stateful_ex_idx = - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_COMP, - 0,NULL,NULL,NULL,zlib_stateful_free_ex_data); + CRYPTO_w_lock(CRYPTO_LOCK_COMP); + if (zlib_stateful_ex_idx == -1) + zlib_stateful_ex_idx = + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_COMP, + 0,NULL,NULL,NULL,zlib_stateful_free_ex_data); + CRYPTO_w_unlock(CRYPTO_LOCK_COMP); if (zlib_stateful_ex_idx == -1) goto err; } diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 9c38f15ab2..009c3be4c0 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -168,7 +168,8 @@ static const char* lock_names[CRYPTO_NUM_LOCKS] = "bn", "ec_pre_comp", "store", -#if CRYPTO_NUM_LOCKS != 38 + "comp", +#if CRYPTO_NUM_LOCKS != 39 # error "Inconsistency between crypto.h and cryptlib.c" #endif }; diff --git a/crypto/crypto.h b/crypto/crypto.h index dd90cfa55d..5238e53066 100644 --- a/crypto/crypto.h +++ b/crypto/crypto.h @@ -203,7 +203,8 @@ typedef struct openssl_item_st #define CRYPTO_LOCK_BN 35 #define CRYPTO_LOCK_EC_PRE_COMP 36 #define CRYPTO_LOCK_STORE 37 -#define CRYPTO_NUM_LOCKS 38 +#define CRYPTO_LOCK_COMP 38 +#define CRYPTO_NUM_LOCKS 39 #define CRYPTO_LOCK 1 #define CRYPTO_UNLOCK 2 |