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