You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2014/12/24 18:26:04 UTC
svn commit: r1647820 - in /subversion/trunk/subversion: libsvn_fs_fs/dag.c
libsvn_fs_x/dag.c
Author: stefan2
Date: Wed Dec 24 17:26:04 2014
New Revision: 1647820
URL: http://svn.apache.org/r1647820
Log:
Fix a pool usage issue with tree deletion. Not sure whether it gets
actually triggered by "normal" use. Patch FSFS and FSX; BDB uses
different code.
* subversion/libsvn_fs_fs/dag.c
(svn_fs_fs__dag_delete_if_mutable): Add a missing iterpool to the
recursive loop.
* subversion/libsvn_fs_x/dag.c
(svn_fs_x__dag_delete_if_mutable): Do the same for FSX.
Modified:
subversion/trunk/subversion/libsvn_fs_fs/dag.c
subversion/trunk/subversion/libsvn_fs_x/dag.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/dag.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/dag.c?rev=1647820&r1=1647819&r2=1647820&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/dag.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/dag.c Wed Dec 24 17:26:04 2014
@@ -866,14 +866,20 @@ svn_fs_fs__dag_delete_if_mutable(svn_fs_
{
apr_array_header_t *entries;
int i;
+ apr_pool_t *iterpool = svn_pool_create(pool);
/* Loop over directory entries */
SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, node, pool));
if (entries)
for (i = 0; i < entries->nelts; ++i)
- SVN_ERR(svn_fs_fs__dag_delete_if_mutable(fs,
- APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *)->id,
- pool));
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_fs_fs__dag_delete_if_mutable(fs,
+ APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *)->id,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
}
/* ... then delete the node itself, after deleting any mutable
Modified: subversion/trunk/subversion/libsvn_fs_x/dag.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/dag.c?rev=1647820&r1=1647819&r2=1647820&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/dag.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/dag.c Wed Dec 24 17:26:04 2014
@@ -865,14 +865,20 @@ svn_fs_x__dag_delete_if_mutable(svn_fs_t
{
apr_array_header_t *entries;
int i;
+ apr_pool_t *iterpool = svn_pool_create(pool);
/* Loop over directory entries */
SVN_ERR(svn_fs_x__dag_dir_entries(&entries, node, pool));
if (entries)
for (i = 0; i < entries->nelts; ++i)
- SVN_ERR(svn_fs_x__dag_delete_if_mutable(fs,
- APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *)->id,
- pool));
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_fs_x__dag_delete_if_mutable(fs,
+ APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *)->id,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
}
/* ... then delete the node itself, after deleting any mutable