Philip Martin <philip.mar...@wandisco.com> writes:

> Philip Martin <philip.mar...@wandisco.com> writes:
>
>> I can fix the valgrind errors with this patch:
>>
>> Index: subversion/libsvn_client/commit.c
>> ===================================================================
>> --- subversion/libsvn_client/commit.c        (revision 1327801)
>> +++ subversion/libsvn_client/commit.c        (working copy)
>> @@ -782,7 +782,7 @@
>>  
>>    SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, url, NULL,
>>                                                 NULL, FALSE, TRUE, ctx,
>> -                                               scratch_pool));
>> +                                               iterpool));
>>  
>>    /* Figure out all the path components we need to create just to have
>>       a place to stick our imported tree. */
>> @@ -790,8 +790,6 @@
>>                              iterpool));
>>    while (kind == svn_node_none)
>>      {
>> -      svn_pool_clear(iterpool);
>> -
>>        svn_uri_split(&temp, &dir, url, scratch_pool);
>>        APR_ARRAY_PUSH(new_entries, const char *) = dir;
>>        url = temp;
>>
>> I'm not sure exactly how the pool management is supposed to work here.
>
> That patch is against r1327801 but it also applies to HEAD.  This
> patch to HEAD also fixes it:
>
>
> Index: subversion/libsvn_client/commit.c
> ===================================================================
> --- subversion/libsvn_client/commit.c (revision 1329331)
> +++ subversion/libsvn_client/commit.c (working copy)
> @@ -968,6 +968,7 @@
>                      ctx, iterpool)))
>      {
>        svn_error_clear(editor->abort_edit(edit_baton, iterpool));
> +      svn_pool_destroy(iterpool);
>        return svn_error_trace(err);
>      }
>  
> as does this:
>
>
> Index: subversion/libsvn_client/commit.c
> ===================================================================
> --- subversion/libsvn_client/commit.c (revision 1329331)
> +++ subversion/libsvn_client/commit.c (working copy)
> @@ -965,7 +965,7 @@
>                      depth, excludes, no_ignore,
>                      ignore_unknown_node_types,
>                      filter_callback, filter_baton,
> -                    ctx, iterpool)))
> +                    ctx, scratch_pool)))
>      {
>        svn_error_clear(editor->abort_edit(edit_baton, iterpool));
>        return svn_error_trace(err);

Although these "work" I think they are simply covering up the real
problem.  In libsvn_ra_neon/commit.c:commit_open_root there is a call to
svn_ra_neon__request_create but no call to svn_ra_neon__request_destroy.
That missing destroy call means that the cleanup handler for the
create-txn request runs much later than those of all the other requests.

-- 
Philip

Reply via email to