Author: stefan2
Date: Tue May 17 13:42:47 2011
New Revision: 1104246

URL: http://svn.apache.org/viewvc?rev=1104246&view=rev
Log:
Follow-up to r1104236: only allocate and initialize as many bits
in the "group_initialized" vector as are actually used.

* subversion/libsvn_subr/cache-membuffer.c
  (svn_cache__membuffer_cache_create): calculate actually required 
   init. flags vector size and use that for allocation and initialization

Modified:
    subversion/trunk/subversion/libsvn_subr/cache-membuffer.c

Modified: subversion/trunk/subversion/libsvn_subr/cache-membuffer.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/cache-membuffer.c?rev=1104246&r1=1104245&r2=1104246&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/cache-membuffer.c (original)
+++ subversion/trunk/subversion/libsvn_subr/cache-membuffer.c Tue May 17 
13:42:47 2011
@@ -981,6 +981,7 @@ svn_cache__membuffer_cache_create(svn_me
 
   apr_uint32_t seg;
   apr_uint32_t group_count;
+  apr_uint32_t group_init_size;
   apr_uint64_t data_size;
 
   /* Determine a reasonable number of cache segments. Segmentation is
@@ -1035,6 +1036,7 @@ svn_cache__membuffer_cache_create(svn_me
       directory_size = group_count * sizeof(entry_group_t);
     }
 
+  group_init_size = 1 + group_count / (8 * GROUP_INIT_GRANULARITY);
   for (seg = 0; seg < segment_count; ++seg)
     {
       /* allocate buffers and initialize cache members
@@ -1047,7 +1049,7 @@ svn_cache__membuffer_cache_create(svn_me
                                group_count * sizeof(entry_group_t),
                                FALSE);
       c[seg].group_initialized = secure_aligned_alloc(pool, 
-                                                      group_count, 
+                                                      group_init_size, 
                                                       FALSE);
       c[seg].first = NO_INDEX;
       c[seg].last = NO_INDEX;
@@ -1074,9 +1076,9 @@ svn_cache__membuffer_cache_create(svn_me
           return svn_error_wrap_apr(APR_ENOMEM, _("OOM"));
         }
 
-      /* initialize directory entries as "unused"
+      /* initialize directory entries as "not initialized", hence "unused"
        */
-      memset(c[seg].group_initialized, FALSE, (apr_size_t)c->group_count);
+      memset(c[seg].group_initialized, 0, group_init_size);
 
 #if APR_HAS_THREADS
       /* A lock for intra-process synchronization to the cache, or NULL if


Reply via email to