Ping...
Blair Zajac wrote on Tue, Nov 09, 2010 at 20:05:13 -0800: > > On Nov 9, 2010, at 1:03 PM, [email protected] wrote: > > > Author: hwright > > Date: Tue Nov 9 21:03:16 2010 > > New Revision: 1033228 > > > > URL: http://svn.apache.org/viewvc?rev=1033228&view=rev > > Log: > > Merge r1022675 from trunk: > > > > * r1022675 (r982355 from ^subversion/branches/performance) > > Limit the amount of unused memory fragments held by the root pools. > > Justification: > > In combination with blame -g server side memory leaks, see r1032808 and > > http://svn.haxx.se/dev/archive-2010-11/0102.shtml, svnserve's memory > > usage can get bloated and stay that way, see > > see http://svn.haxx.se/dev/archive-2010-11/0165.shtml. > > Notes: > > Use --accept=mine-full to avoid bizzare branch root property conflicts > > on 'svn:ignore' and 'bugtraq:logregex'. This happens for me with both > > 1.6.14 and tr...@1032984. > > Votes: > > +1: pburba, cmpilato, hwright > > > > > > > --- subversion/branches/1.6.x/subversion/svnserve/main.c (original) > > +++ subversion/branches/1.6.x/subversion/svnserve/main.c Tue Nov 9 > > 21:03:16 2010 > > @@ -356,6 +356,7 @@ int main(int argc, const char *argv[]) > > apr_sockaddr_t *sa; > > apr_pool_t *pool; > > apr_pool_t *connection_pool; > > + apr_allocator_t *allocator; > > svn_error_t *err; > > apr_getopt_t *os; > > int opt; > > @@ -747,10 +748,22 @@ int main(int argc, const char *argv[]) > > return ERROR_SUCCESS; > > #endif > > > > + /* If we are using fulltext caches etc., we will allocate many large > > + chunks of memory of various sizes outside the cachde for those > > + fulltexts. Make sure, we use the memory wisely: use an allocator > > + that causes memory fragments to be given back to the OS early. */ > > + > > + if (apr_allocator_create(&allocator)) > > + return EXIT_FAILURE; > > + > > + apr_allocator_max_free_set(allocator, > > SVN_ALLOCATOR_RECOMMENDED_MAX_FREE); > > + > > /* Non-standard pool handling. The main thread never blocks to join > > the connection threads so it cannot clean up after each one. So > > separate pools, that can be cleared at thread exit, are used */ > > - connection_pool = svn_pool_create(NULL); > > + > > + connection_pool = svn_pool_create_ex(NULL, allocator); > > + apr_allocator_owner_set(allocator, connection_pool); > > > Shouldn't the allocator have a mutex registered with it, given that svnserve > is multithreaded? > > Blair >

