Build the branch with pool debugging on APR and tests fail on the merge
operation with:

  apr_hash_merge: overlay's pool is not an ancestor of p
  Aborted

The problem is the pattern used to create svnmover_wc_t objects: a
result pool is passed to wc_create(), a subpool is created and the
object and its data are alocated in that subpool.  Later when execute()
calls svn_branch_merge() it passes data allocated in that subpool but
the scratch_pool that also gets passed is a sibling not a descendant of
that pool.

A simple fix is

Index: ../src2/subversion/svnmover/svnmover.c
===================================================================
--- ../src2/subversion/svnmover/svnmover.c      (revision 1690117)
+++ ../src2/subversion/svnmover/svnmover.c      (working copy)
@@ -2523,7 +2523,7 @@
 {
   svn_editor3_t *editor;
   const char *base_relpath;
-  apr_pool_t *iterpool = svn_pool_create(pool);
+  apr_pool_t *iterpool = svn_pool_create(wc->pool);
   int i;
 
   editor = wc->editor;

I think allocating the subpool in wc_create() is a bit of an
anti-pattern, it takes pool management away from the caller.  Simply
eliminating the subpool is not a fix unless final_commit() is also
changed to not destroy the svnmover_wc_t pool.

-- 
Philip Martin
WANdisco

Reply via email to