Daniel Shahaf wrote on Sun, Sep 11, 2011 at 03:25:18 +0300:
> I wrote this while debugging some pool segfaults, and I don't want to
> commit it until I've resolved them (for obvious reasons), so I'm abusing
> all of your inboxes as my personal patch queueing system.  Thanks for
> your cooperation.
> 
> [[[
> On the fs-successor-ids branch, convert svn_fs_base__get_node_successors()
> to the dual-pool paradigm.
> 
> * subversion/libsvn_fs_base/node-rev.h
>   (svn_fs_base__get_node_successors):
>     Split POOL parameter into RESULT_POOL/SCRATCH_POOL.
> 
> * subversion/libsvn_fs_base/node-rev.c
>   (svn_fs_base__get_node_successors):
>     Convert to the dual-pool paradigm.
> 
> * subversion/libsvn_fs_base/tree.c
>   (txn_body_history_next): Update caller.
> ]]]

[[[
Index: subversion/libsvn_fs_base/tree.c
===================================================================
--- subversion/libsvn_fs_base/tree.c    (revision 1167653)
+++ subversion/libsvn_fs_base/tree.c    (working copy)
@@ -4538,7 +4538,8 @@ txn_body_history_next(void *baton, trail_t *trail)
     SVN_ERR(svn_fs_base__get_node_successors(&successors,
                                              bhd->fs, node_id,
                                              TRUE /* committed_only */,
-                                             trail, pool));
+                                             trail,
+                                             args->pool, trail->pool));
     for (i = 0; i < successors->nelts; i++)
       {
         /* ... then massage its results into something understandable by
Index: subversion/libsvn_fs_base/node-rev.c
===================================================================
--- subversion/libsvn_fs_base/node-rev.c        (revision 1167655)
+++ subversion/libsvn_fs_base/node-rev.c        (working copy)
@@ -164,11 +164,12 @@ svn_fs_base__get_node_successors(apr_array_header_
                                  const svn_fs_id_t *id,
                                  svn_boolean_t committed_only,
                                  trail_t *trail,
-                                 apr_pool_t *pool)
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool)
 {
   apr_array_header_t *all_successors, *successors;
-  apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_string_t *node_id_str = svn_fs_base__id_unparse(id, pool);
+  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+  svn_string_t *node_id_str = svn_fs_base__id_unparse(id, scratch_pool);
   base_fs_data_t *bfd = fs->fsap_data;
   int i;
 
@@ -180,15 +181,16 @@ svn_fs_base__get_node_successors(apr_array_header_
     }
 
   SVN_ERR(svn_fs_bdb__successors_fetch(&all_successors, fs, node_id_str->data,
-                                       trail, pool));
-  successors = apr_array_make(pool, all_successors->nelts,
+                                       trail, scratch_pool));
+  successors = apr_array_make(result_pool, all_successors->nelts,
                               sizeof(const svn_fs_id_t *));
   for (i = 0; i < all_successors->nelts; i++)
     {
       svn_revnum_t revision;
       const char *succ_id_str = APR_ARRAY_IDX(all_successors, i, const char *);
       const svn_fs_id_t *succ_id = svn_fs_base__id_parse(succ_id_str,
-                                                   strlen(succ_id_str), pool);
+                                                   strlen(succ_id_str),
+                                                   result_pool);
 
       svn_pool_clear(iterpool);
 
Index: subversion/libsvn_fs_base/node-rev.h
===================================================================
--- subversion/libsvn_fs_base/node-rev.h        (revision 1167653)
+++ subversion/libsvn_fs_base/node-rev.h        (working copy)
@@ -106,7 +106,8 @@ svn_error_t *svn_fs_base__get_node_successors(apr_
                                               const svn_fs_id_t *id,
                                               svn_boolean_t committed_only,
                                               trail_t *trail,
-                                              apr_pool_t *pool);
+                                              apr_pool_t *result_pool,
+                                              apr_pool_t *scratch_pool);
 
 #ifdef __cplusplus
 }
]]]

Reply via email to