]> granicus.if.org Git - apache/commitdiff
* modules/ldap/util_ldap_cache.c (util_ldap_cache_init): Use the
authorJoe Orton <jorton@apache.org>
Thu, 28 Jul 2005 11:53:25 +0000 (11:53 +0000)
committerJoe Orton <jorton@apache.org>
Thu, 28 Jul 2005 11:53:25 +0000 (11:53 +0000)
actual available size of the shm segment not the requested size.
Ensure the requested size is aligned.  Check errors from apr_rmm_init.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@225753 13f79535-47bb-0310-9956-ffa450edef68

modules/ldap/util_ldap_cache.c

index e8feca84e69ed0c5b451110e03b8cbed3db4408d..9a28a728ed1804b91c70e988b705448880891956 100644 (file)
@@ -407,8 +407,11 @@ apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st)
 {
 #if APR_HAS_SHARED_MEMORY
     apr_status_t result;
+    apr_size_t size;
 
-    result = apr_shm_create(&st->cache_shm, st->cache_bytes, st->cache_file, st->pool);
+    size = APR_ALIGN_DEFAULT(st->cache_bytes);
+
+    result = apr_shm_create(&st->cache_shm, size, st->cache_file, st->pool);
     if (result == APR_EEXIST) {
         /*
          * The cache could have already been created (i.e. we may be a child process).  See
@@ -420,8 +423,17 @@ apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st)
         return result;
     }
 
+    /* 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 */
-    apr_rmm_init(&st->cache_rmm, NULL, (void *)apr_shm_baseaddr_get(st->cache_shm), st->cache_bytes, st->pool);
+    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
 
     apr_pool_cleanup_register(st->pool, st , util_ldap_cache_module_kill, apr_pool_cleanup_null);