You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2012/03/24 15:53:12 UTC
svn commit: r1304815 - /subversion/trunk/subversion/libsvn_fs_fs/tree.c
Author: danielsh
Date: Sat Mar 24 14:53:12 2012
New Revision: 1304815
URL: http://svn.apache.org/viewvc?rev=1304815&view=rev
Log:
Followup to r1304656: use an iterpool.
* subversion/libsvn_fs_fs/tree.c
(verify_node): Grow two separate pool parameters (though callers pass
the same pool at the moment), and use iterpools for the recursion.
(svn_fs_fs__verify_root): Update caller.
Modified:
subversion/trunk/subversion/libsvn_fs_fs/tree.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/tree.c?rev=1304815&r1=1304814&r2=1304815&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/tree.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/tree.c Sat Mar 24 14:53:12 2012
@@ -3788,7 +3788,8 @@ stringify_node(dag_node_t *node,
static svn_error_t *
verify_node(dag_node_t *node,
svn_revnum_t rev,
- apr_pool_t *pool)
+ apr_pool_t *pool,
+ apr_pool_t *node_pool)
{
svn_boolean_t has_mergeinfo;
apr_int64_t mergeinfo_count;
@@ -3796,12 +3797,13 @@ verify_node(dag_node_t *node,
svn_fs_t *fs = svn_fs_fs__dag_get_fs(node);
int pred_count;
svn_node_kind_t kind;
+ apr_pool_t *iterpool = svn_pool_create(pool);
/* Fetch some data. */
- SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&has_mergeinfo, node, pool));
- SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_count, node, pool));
- SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node, pool));
- SVN_ERR(svn_fs_fs__dag_get_predecessor_count(&pred_count, node, pool));
+ SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&has_mergeinfo, node, node_pool));
+ SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_count, node, node_pool));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node, node_pool));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_count(&pred_count, node, node_pool));
kind = svn_fs_fs__dag_node_kind(node);
/* Sanity check. */
@@ -3809,22 +3811,22 @@ verify_node(dag_node_t *node,
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
"Negative mergeinfo-count %" APR_INT64_T_FMT
" on node '%s'",
- mergeinfo_count, stringify_node(node, pool));
+ mergeinfo_count, stringify_node(node, iterpool));
/* Issue #4129. (This check will explicitly catch non-root instances too.) */
if (pred_id)
{
dag_node_t *pred;
int pred_pred_count;
- SVN_ERR(svn_fs_fs__dag_get_node(&pred, fs, pred_id, pool));
+ SVN_ERR(svn_fs_fs__dag_get_node(&pred, fs, pred_id, iterpool));
SVN_ERR(svn_fs_fs__dag_get_predecessor_count(&pred_pred_count, pred,
- pool));
+ iterpool));
if (pred_pred_count+1 != pred_count)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
"Predecessor count mismatch: "
"%s has %d, but %s has %d",
- stringify_node(node, pool), pred_count,
- stringify_node(pred, pool), pred_pred_count);
+ stringify_node(node, iterpool), pred_count,
+ stringify_node(pred, iterpool), pred_pred_count);
}
/* Kind-dependent verifications. */
@@ -3832,7 +3834,7 @@ verify_node(dag_node_t *node,
{
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
"Node '%s' has kind 'none'",
- stringify_node(node, pool));
+ stringify_node(node, iterpool));
}
if (kind == svn_node_file)
{
@@ -3840,7 +3842,7 @@ verify_node(dag_node_t *node,
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
"File node '%s' has inconsistent mergeinfo: "
"has_mergeinfo=%d, mergeinfo_count=%d",
- stringify_node(node, pool),
+ stringify_node(node, iterpool),
has_mergeinfo, mergeinfo_count);
}
if (kind == svn_node_dir)
@@ -3849,7 +3851,7 @@ verify_node(dag_node_t *node,
apr_hash_index_t *hi;
apr_int64_t children_mergeinfo = 0;
- SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, node, pool, pool));
+ SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, node, pool, node_pool));
/* Compute CHILDREN_MERGEINFO. */
/* ### TODO: iterpool? */
@@ -3862,15 +3864,17 @@ verify_node(dag_node_t *node,
svn_revnum_t child_rev;
apr_int64_t child_mergeinfo;
+ svn_pool_clear(iterpool);
+
/* Compute CHILD_REV. */
- SVN_ERR(svn_fs_fs__dag_get_node(&child, fs, dirent->id, pool));
- SVN_ERR(svn_fs_fs__dag_get_revision(&child_rev, child, pool));
+ SVN_ERR(svn_fs_fs__dag_get_node(&child, fs, dirent->id, iterpool));
+ SVN_ERR(svn_fs_fs__dag_get_revision(&child_rev, child, iterpool));
if (child_rev == rev)
- SVN_ERR(verify_node(child, rev, pool));
+ SVN_ERR(verify_node(child, rev, iterpool, iterpool));
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&child_mergeinfo, child,
- pool));
+ iterpool));
children_mergeinfo += child_mergeinfo;
}
@@ -3880,11 +3884,12 @@ verify_node(dag_node_t *node,
"Mergeinfo-count discrepancy on '%s': "
"expected %" APR_INT64_T_FMT "+%d, "
"counted %" APR_INT64_T_FMT,
- stringify_node(node, pool),
+ stringify_node(node, iterpool),
mergeinfo_count, has_mergeinfo,
children_mergeinfo);
}
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -3900,7 +3905,7 @@ svn_fs_fs__verify_root(svn_fs_root_t *ro
frd = root->fsap_data;
/* Recursively verify ROOT_DIR. */
- SVN_ERR(verify_node(frd->root_dir, root->rev, pool));
+ SVN_ERR(verify_node(frd->root_dir, root->rev, pool, pool));
/* Verify explicitly the predecessor of the root. */
{