]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
encoder: update to structure based atomics
authorPauli <pauli@openssl.org>
Wed, 21 Jun 2023 23:41:30 +0000 (09:41 +1000)
committerPauli <pauli@openssl.org>
Sat, 1 Jul 2023 11:18:25 +0000 (21:18 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21260)

crypto/encode_decode/decoder_meth.c
crypto/encode_decode/encoder_local.h
crypto/encode_decode/encoder_meth.c

index b133402e09b916003db9a6a37466b3f87091a38f..fca8be1bb1f68b4003e5dd7f47e897cf281fbf87 100644 (file)
@@ -31,14 +31,11 @@ static OSSL_DECODER *ossl_decoder_new(void)
 
     if ((decoder = OPENSSL_zalloc(sizeof(*decoder))) == NULL)
         return NULL;
-    if ((decoder->base.lock = CRYPTO_THREAD_lock_new()) == NULL) {
+    if (!CRYPTO_NEW_REF(&decoder->base.refcnt, 1)) {
         OSSL_DECODER_free(decoder);
-        ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_CRYPTO_LIB);
         return NULL;
     }
 
-    decoder->base.refcnt = 1;
-
     return decoder;
 }
 
@@ -46,7 +43,7 @@ int OSSL_DECODER_up_ref(OSSL_DECODER *decoder)
 {
     int ref = 0;
 
-    CRYPTO_UP_REF(&decoder->base.refcnt, &ref, decoder->base.lock);
+    CRYPTO_UP_REF(&decoder->base.refcnt, &ref);
     return 1;
 }
 
@@ -57,13 +54,13 @@ void OSSL_DECODER_free(OSSL_DECODER *decoder)
     if (decoder == NULL)
         return;
 
-    CRYPTO_DOWN_REF(&decoder->base.refcnt, &ref, decoder->base.lock);
+    CRYPTO_DOWN_REF(&decoder->base.refcnt, &ref);
     if (ref > 0)
         return;
     OPENSSL_free(decoder->base.name);
     ossl_property_free(decoder->base.parsed_propdef);
     ossl_provider_free(decoder->base.prov);
-    CRYPTO_THREAD_lock_free(decoder->base.lock);
+    CRYPTO_FREE_REF(&decoder->base.refcnt);
     OPENSSL_free(decoder);
 }
 
index 6a5bf16ae92df79921a1c42491adeecfb694e6da..62da028becb799165004e960d058385b5375f8ba 100644 (file)
@@ -25,7 +25,6 @@ struct ossl_endecode_base_st {
     OSSL_PROPERTY_LIST *parsed_propdef;
 
     CRYPTO_REF_COUNT refcnt;
-    CRYPTO_RWLOCK *lock;
 };
 
 struct ossl_encoder_st {
index 9093f29abb1bfc9a0086522c296271631749208d..dbc8d9f9974501bc7dcdd931cd884d1df2b5da33 100644 (file)
@@ -31,14 +31,11 @@ static OSSL_ENCODER *ossl_encoder_new(void)
 
     if ((encoder = OPENSSL_zalloc(sizeof(*encoder))) == NULL)
         return NULL;
-    if ((encoder->base.lock = CRYPTO_THREAD_lock_new()) == NULL) {
+    if (!CRYPTO_NEW_REF(&encoder->base.refcnt, 1)) {
         OSSL_ENCODER_free(encoder);
-        ERR_raise(ERR_LIB_OSSL_ENCODER, ERR_R_CRYPTO_LIB);
         return NULL;
     }
 
-    encoder->base.refcnt = 1;
-
     return encoder;
 }
 
@@ -46,7 +43,7 @@ int OSSL_ENCODER_up_ref(OSSL_ENCODER *encoder)
 {
     int ref = 0;
 
-    CRYPTO_UP_REF(&encoder->base.refcnt, &ref, encoder->base.lock);
+    CRYPTO_UP_REF(&encoder->base.refcnt, &ref);
     return 1;
 }
 
@@ -57,13 +54,13 @@ void OSSL_ENCODER_free(OSSL_ENCODER *encoder)
     if (encoder == NULL)
         return;
 
-    CRYPTO_DOWN_REF(&encoder->base.refcnt, &ref, encoder->base.lock);
+    CRYPTO_DOWN_REF(&encoder->base.refcnt, &ref);
     if (ref > 0)
         return;
     OPENSSL_free(encoder->base.name);
     ossl_property_free(encoder->base.parsed_propdef);
     ossl_provider_free(encoder->base.prov);
-    CRYPTO_THREAD_lock_free(encoder->base.lock);
+    CRYPTO_FREE_REF(&encoder->base.refcnt);
     OPENSSL_free(encoder);
 }