summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorStefan Fritsch <sf@apache.org>2011-04-25 20:00:43 +0000
committerStefan Fritsch <sf@apache.org>2011-04-25 20:00:43 +0000
commit46dc6e060bddc57dda3669d557af3e8d7cd1d07e (patch)
treee426f1b1f198834298589f5584048e15b5147d87 /modules
parentbf07c1867c534e14a60b1a2718c9093929223f6e (diff)
downloadhttpd-46dc6e060bddc57dda3669d557af3e8d7cd1d07e.tar.gz
mod_ldap: Make LDAPSharedCacheSize 0 create a non-shared-memory cache per
process as opposed to disabling caching completely. This allows to use the non-shared-memory cache as a workaround for the shared memory cache not being available during graceful restarts PR: 48958 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1096577 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'modules')
-rw-r--r--modules/ldap/util_ldap.c17
-rw-r--r--modules/ldap/util_ldap_cache.c36
-rw-r--r--modules/ldap/util_ldap_cache_mgr.c15
3 files changed, 42 insertions, 26 deletions
diff --git a/modules/ldap/util_ldap.c b/modules/ldap/util_ldap.c
index 591d04800f..d774f383cb 100644
--- a/modules/ldap/util_ldap.c
+++ b/modules/ldap/util_ldap.c
@@ -2728,9 +2728,12 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) {
#if APR_HAS_SHARED_MEMORY
- /* If the cache file already exists then delete it. Otherwise we are
- * going to run into problems creating the shared memory. */
- if (st->cache_file) {
+ /*
+ * If we are using shared memory caching and the cache file already
+ * exists then delete it. Otherwise we are going to run into problems
+ * creating the shared memory.
+ */
+ if (st->cache_file && st->cache_bytes > 0) {
char *lck_file = apr_pstrcat(ptemp, st->cache_file, ".lck",
NULL);
apr_file_remove(lck_file, ptemp);
@@ -2740,10 +2743,10 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
}
#if APR_HAS_SHARED_MEMORY
- /* initializing cache if shared memory size is not zero and we already
- * don't have shm address
+ /*
+ * initializing cache if we don't already have a shm address
*/
- if (!st->cache_shm && st->cache_bytes > 0) {
+ if (!st->cache_shm) {
#endif
result = util_ldap_cache_init(p, st);
if (result != APR_SUCCESS) {
@@ -2865,7 +2868,7 @@ static const command_rec util_ldap_cmds[] = {
AP_INIT_TAKE1("LDAPSharedCacheSize", util_ldap_set_cache_bytes,
NULL, RSRC_CONF,
"Set the size of the shared memory cache (in bytes). Use "
- "0 to disable the shared memory cache. (default: 100000)"),
+ "0 to disable the shared memory cache. (default: 500000)"),
AP_INIT_TAKE1("LDAPSharedCacheFile", util_ldap_set_cache_file,
NULL, RSRC_CONF,
diff --git a/modules/ldap/util_ldap_cache.c b/modules/ldap/util_ldap_cache.c
index 2217b20b7f..87642e114a 100644
--- a/modules/ldap/util_ldap_cache.c
+++ b/modules/ldap/util_ldap_cache.c
@@ -420,27 +420,29 @@ apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st)
apr_status_t result;
apr_size_t size;
- if (st->cache_file) {
- /* Remove any existing shm segment with this name. */
- apr_shm_remove(st->cache_file, st->pool);
- }
+ if (st->cache_bytes > 0) {
+ if (st->cache_file) {
+ /* Remove any existing shm segment with this name. */
+ apr_shm_remove(st->cache_file, st->pool);
+ }
- size = APR_ALIGN_DEFAULT(st->cache_bytes);
+ size = APR_ALIGN_DEFAULT(st->cache_bytes);
- result = apr_shm_create(&st->cache_shm, size, st->cache_file, st->pool);
- if (result != APR_SUCCESS) {
- return result;
- }
+ result = apr_shm_create(&st->cache_shm, size, st->cache_file, st->pool);
+ if (result != APR_SUCCESS) {
+ return result;
+ }
- /* Determine the usable size of the shm segment. */
- size = apr_shm_size_get(st->cache_shm);
+ /* Determine the usable size of the shm segment. */
+ size = apr_shm_size_get(st->cache_shm);
- /* This will create a rmm "handler" to get into the shared memory area */
- result = apr_rmm_init(&st->cache_rmm, NULL,
- apr_shm_baseaddr_get(st->cache_shm), size,
- st->pool);
- if (result != APR_SUCCESS) {
- return result;
+ /* This will create a rmm "handler" to get into the shared memory area */
+ result = apr_rmm_init(&st->cache_rmm, NULL,
+ apr_shm_baseaddr_get(st->cache_shm), size,
+ st->pool);
+ if (result != APR_SUCCESS) {
+ return result;
+ }
}
#endif
diff --git a/modules/ldap/util_ldap_cache_mgr.c b/modules/ldap/util_ldap_cache_mgr.c
index adefcdcfd7..2f1d844bba 100644
--- a/modules/ldap/util_ldap_cache_mgr.c
+++ b/modules/ldap/util_ldap_cache_mgr.c
@@ -331,16 +331,19 @@ util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
{
util_ald_cache_t *cache;
unsigned long i;
+#if APR_HAS_SHARED_MEMORY
+ apr_rmm_off_t block;
+#endif
if (cache_size <= 0)
return NULL;
#if APR_HAS_SHARED_MEMORY
if (!st->cache_rmm) {
- return NULL;
+ cache = (util_ald_cache_t *)calloc(sizeof(util_ald_cache_t), 1);
}
else {
- apr_rmm_off_t block = apr_rmm_calloc(st->cache_rmm, sizeof(util_ald_cache_t));
+ block = apr_rmm_calloc(st->cache_rmm, sizeof(util_ald_cache_t));
cache = block ? (util_ald_cache_t *)apr_rmm_addr_get(st->cache_rmm, block) : NULL;
}
#else
@@ -363,6 +366,14 @@ util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
cache->nodes = (util_cache_node_t **)util_ald_alloc(cache, cache->size * sizeof(util_cache_node_t *));
if (!cache->nodes) {
util_ald_free(cache, cache);
+#if APR_HAS_SHARED_MEMORY
+ if (!st->cache_rmm)
+ free(cache);
+ else
+ apr_rmm_free(st->cache_rmm, block);
+#else
+ free(cache);
+#endif
return NULL;
}