diff options
author | wrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68> | 2008-11-21 02:14:35 +0000 |
---|---|---|
committer | wrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68> | 2008-11-21 02:14:35 +0000 |
commit | bb51c0a3686dd34944189ae26d4bf9ad9e7542e6 (patch) | |
tree | 1393c635e47393f27a807c4827d5ab3615042ec3 | |
parent | 35cb58fc080f05f5ddba1fd46c906705cb079bbb (diff) | |
download | libapr-util-bb51c0a3686dd34944189ae26d4bf9ad9e7542e6.tar.gz |
Remove redundant and wrongly structured code, *driver would not
have been initialized before setting a corrupt value into the
drivers hash.
Even if re->init is not called for, this code would be better structured
+ if (rv == APR_SUCCESS && (*driver)->init) {
but I believe we must init in the context of apr (not simply the driver's
initialization logic).
git-svn-id: http://svn.apache.org/repos/asf/apr/apr-util/trunk@719448 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | dbd/apr_dbd.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/dbd/apr_dbd.c b/dbd/apr_dbd.c index eace178c..7dc30992 100644 --- a/dbd/apr_dbd.c +++ b/dbd/apr_dbd.c @@ -101,6 +101,7 @@ APU_DECLARE(apr_status_t) apr_dbd_init(apr_pool_t *pool) /* deprecate in 2.0 - permit implicit initialization */ apu_dso_init(pool); #endif + drivers = apr_hash_make(pool); #if APR_HAS_THREADS @@ -109,6 +110,7 @@ APU_DECLARE(apr_status_t) apr_dbd_init(apr_pool_t *pool) #endif #if !APU_DSO_BUILD + /* Load statically-linked drivers: */ #if APU_HAVE_MYSQL DRIVER_LOAD("mysql", apr_dbd_mysql_driver, pool); @@ -182,22 +184,15 @@ APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name, #endif apr_snprintf(symname, sizeof(symname), "apr_dbd_%s_driver", name); rv = apu_dso_load(NULL, &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; + 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) { + (*driver)->init(pool); } - goto unlock; } - *driver = symbol; - if ((*driver)->init) { - (*driver)->init(pool); - } - name = apr_pstrdup(pool, name); - apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver); - -unlock: apu_dso_mutex_unlock(); #else /* not builtin and !APR_HAS_DSO => not implemented */ |