Ivan Zhakov <ivan_at_visualsvn.com> writes:
> On Wed, May 8, 2013 at 1:00 PM, Bert Huijben <bert_at_qqmail.nl> wrote:
>>
>> The fix resolves the symptoms, but I would guess it might be better
>> to make the thread create (and destroy) its own pool, while using
>> some proper iterpool in the function that creates the pools. Handing
>> a temporary pool to a new thread doesn't give us clean and easy to
>> maintain code... as this old bug shows us.
>>
> It would not for two reasons:
> 1. We allocate connection stream in connection_pool in main thread
> before creating worker thread
> 2. Current APR implementation requires that apr_thread_t * is
> available during thread lifetime. And we don't have any kind of
> notification when thread completes.
We could do this:
Index: subversion/svnserve/svnserve.c
===================================================================
--- subversion/svnserve/svnserve.c (revision 1480565)
+++ subversion/svnserve/svnserve.c (working copy)
@@ -444,6 +444,7 @@ int main(int argc, const char *argv[])
apr_sockaddr_t *sa;
apr_pool_t *pool;
apr_pool_t *connection_pool;
+ apr_pool_t *iterpool;
svn_error_t *err;
apr_getopt_t *os;
int opt;
@@ -973,6 +974,7 @@ int main(int argc, const char *argv[])
{
#if APR_HAS_THREADS
settings.single_threaded = FALSE;
+ iterpool = svn_pool_create(pool);
#else
/* No requests will be processed at all
* (see "switch (handling_mode)" code further down).
@@ -1093,7 +1095,7 @@ int main(int argc, const char *argv[])
particularly sophisticated strategy for a threaded server, it's
little different from forking one process per connection. */
#if APR_HAS_THREADS
- status = apr_threadattr_create(&tattr, connection_pool);
+ status = apr_threadattr_create(&tattr, iterpool);
if (status)
{
err = svn_error_wrap_apr(status, _("Can't create threadattr"));
@@ -1122,6 +1124,7 @@ int main(int argc, const char *argv[])
svn_error_clear(err);
exit(1);
}
+ svn_pool_clear(iterpool);
#endif
break;
--
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download
Received on 2013-05-09 14:44:29 CEST