Protect loading routines with a lock.
authorRichard Levitte <levitte@openssl.org>
Mon, 16 Dec 2002 06:06:03 +0000 (06:06 +0000)
committerRichard Levitte <levitte@openssl.org>
Mon, 16 Dec 2002 06:06:03 +0000 (06:06 +0000)
PR: 373

ssl/ssl_ciph.c

index 43abea1..d4f86f6 100644 (file)
@@ -197,6 +197,10 @@ static int sk_comp_cmp(const SSL_COMP * const *a,
 
 static void load_builtin_compressions(void)
        {
 
 static void load_builtin_compressions(void)
        {
+       if (ssl_comp_methods != NULL)
+               return;
+
+       CRYPTO_w_lock(CRYPTO_LOCK_SSL);
        if (ssl_comp_methods == NULL)
                {
                SSL_COMP *comp = NULL;
        if (ssl_comp_methods == NULL)
                {
                SSL_COMP *comp = NULL;
@@ -222,6 +226,7 @@ static void load_builtin_compressions(void)
                        }
                MemCheck_on();
                }
                        }
                MemCheck_on();
                }
+       CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
        }
 
 int ssl_cipher_get_evp(SSL_SESSION *s, const EVP_CIPHER **enc,
        }
 
 int ssl_cipher_get_evp(SSL_SESSION *s, const EVP_CIPHER **enc,
@@ -793,7 +798,12 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method,
         */
        if (rule_str == NULL) return(NULL);
 
         */
        if (rule_str == NULL) return(NULL);
 
-       if (init_ciphers) load_ciphers();
+       if (init_ciphers)
+               {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL);
+               if (init_ciphers) load_ciphers();
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
+               }
 
        /*
         * To reduce the work to do we only want to process the compiled
 
        /*
         * To reduce the work to do we only want to process the compiled