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
}
]]]
Received on 2011-09-11 03:45:24 CEST