diff options
author | minfrin <minfrin@13f79535-47bb-0310-9956-ffa450edef68> | 2012-04-01 12:00:12 +0000 |
---|---|---|
committer | minfrin <minfrin@13f79535-47bb-0310-9956-ffa450edef68> | 2012-04-01 12:00:12 +0000 |
commit | 03b67bf198f777fa2495442c4aef9055d3c93f95 (patch) | |
tree | 4e3d037e4b3fe3913e939f279b1513bdf66a7c7d | |
parent | 6a3076bbe2f2d574819b3b6de33dee65475293f3 (diff) | |
download | libapr-03b67bf198f777fa2495442c4aef9055d3c93f95.tar.gz |
apr_crypto: Ensure the *driver variable is initialised when the library
has already been loaded. Fix ported from apr_dbd.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@1308087 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | crypto/apr_crypto.c | 22 |
2 files changed, 10 insertions, 15 deletions
@@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes for APR 2.0.0 + *) apr_crypto: Ensure the *driver variable is initialised when the library + has already been loaded. Fix ported from apr_dbd. [Graham Leggett] + *) apr_file_open: Avoid fcntl() calls if support for O_CLOEXEC works. PR 48557. [Mike Frysinger <vapier gentoo org>] diff --git a/crypto/apr_crypto.c b/crypto/apr_crypto.c index a7eac07f7..7f67356f2 100644 --- a/crypto/apr_crypto.c +++ b/crypto/apr_crypto.c @@ -178,24 +178,16 @@ APR_DECLARE(apr_status_t) apr_crypto_get_driver( #endif apr_snprintf(symname, sizeof(symname), "apr_crypto_%s_driver", name); rv = apu_dso_load(&dso, &symbol, modname, symname, pool); - if (rv != APR_SUCCESS) { /* APR_EDSOOPEN or APR_ESYMNOTFOUND? */ - if (rv == APR_EINIT) { /* previously loaded?!? */ - name = apr_pstrdup(pool, name); - apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver); - rv = APR_SUCCESS; - } - goto unlock; - } - *driver = symbol; - if ((*driver)->init) { - rv = (*driver)->init(pool, params, result); - } - if (rv == APR_SUCCESS) { + if (rv == APR_SUCCESS || rv == APR_EINIT) { /* previously loaded?!? */ + *driver = symbol; name = apr_pstrdup(pool, name); apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver); + rv = APR_SUCCESS; + if ((*driver)->init) { + rv = (*driver)->init(pool, params, result); + } } - - unlock: apu_dso_mutex_unlock(); + apu_dso_mutex_unlock(); if (APR_SUCCESS != rv && result && !*result) { char *buffer = apr_pcalloc(pool, ERROR_SIZE); |