Author: pburba
Date: Fri Jun  3 16:27:13 2011
New Revision: 1131096

URL: http://svn.apache.org/viewvc?rev=1131096&view=rev
Log:
Fix iterpool usage when filtering self-referential mergeinfo.

* subversion/libsvn_client/merge.c
  (filter_self_referential_mergeinfo): Actually clear the iterpool and then
   use it as much as possible in the loop; only the filtered properties
   need be allocated in the passed-in pool.

Modified:
    subversion/trunk/subversion/libsvn_client/merge.c

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1131096&r1=1131095&r2=1131096&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Fri Jun  3 16:27:13 2011
@@ -844,14 +844,16 @@ filter_self_referential_mergeinfo(apr_ar
           continue;
         }
 
+      svn_pool_clear(iterpool);
+
       /* Non-empty mergeinfo; filter self-referential mergeinfo out. */
       /* Temporarily reparent our RA session to the merge
          target's URL. */
       SVN_ERR(svn_client_url_from_path2(&target_url, local_abspath,
-                                        ctx, pool, pool));
+                                        ctx, iterpool, iterpool));
       SVN_ERR(svn_client__ensure_ra_session_url(&old_url,
                                                 ra_session,
-                                                target_url, pool));
+                                                target_url, iterpool));
 
       /* Parse the incoming mergeinfo to allow easier manipulation. */
       err = svn_mergeinfo_parse(&mergeinfo, prop->value->data, iterpool);
@@ -899,7 +901,7 @@ filter_self_referential_mergeinfo(apr_ar
       SVN_ERR(split_mergeinfo_on_revision(&younger_mergeinfo,
                                           &mergeinfo,
                                           base_revision,
-                                          pool));
+                                          iterpool));
 
       /* Filter self-referential mergeinfo from younger_mergeinfo. */
       if (younger_mergeinfo)
@@ -908,9 +910,9 @@ filter_self_referential_mergeinfo(apr_ar
           const char *merge_source_root_url;
 
           SVN_ERR(svn_ra_get_repos_root2(ra_session,
-                                         &merge_source_root_url, pool));
+                                         &merge_source_root_url, iterpool));
 
-          for (hi = apr_hash_first(pool, younger_mergeinfo);
+          for (hi = apr_hash_first(iterpool, younger_mergeinfo);
                hi; hi = apr_hash_next(hi))
             {
               int j;
@@ -918,11 +920,11 @@ filter_self_referential_mergeinfo(apr_ar
               apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
               const char *merge_source_url;
               apr_array_header_t *adjusted_rangelist =
-                apr_array_make(pool, 0, sizeof(svn_merge_range_t *));
+                apr_array_make(iterpool, 0, sizeof(svn_merge_range_t *));
 
               merge_source_url =
                     svn_path_url_add_component2(merge_source_root_url,
-                                                source_path + 1, pool);
+                                                source_path + 1, iterpool);
 
               for (j = 0; j < rangelist->nelts; j++)
                 {
@@ -959,7 +961,7 @@ filter_self_referential_mergeinfo(apr_ar
                                                     &rev1_opt,
                                                     &rev2_opt,
                                                     ctx,
-                                                    pool);
+                                                    iterpool);
                   if (err)
                     {
                       if (err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES
@@ -1019,7 +1021,7 @@ filter_self_referential_mergeinfo(apr_ar
               if (adjusted_rangelist->nelts)
                 {
                   if (!filtered_younger_mergeinfo)
-                    filtered_younger_mergeinfo = apr_hash_make(pool);
+                    filtered_younger_mergeinfo = apr_hash_make(iterpool);
                   apr_hash_set(filtered_younger_mergeinfo, source_path,
                                APR_HASH_KEY_STRING, adjusted_rangelist);
                 }
@@ -1042,24 +1044,24 @@ filter_self_referential_mergeinfo(apr_ar
             SVN_INVALID_REVNUM,
             ra_session,
             ctx,
-            pool));
+            iterpool));
 
           /* Remove PATH's implicit mergeinfo from the incoming mergeinfo. */
           SVN_ERR(svn_mergeinfo_remove2(&filtered_mergeinfo,
                                         implicit_mergeinfo,
-                                        mergeinfo, TRUE, pool, iterpool));
+                                        mergeinfo, TRUE, iterpool, iterpool));
         }
 
       /* If we reparented RA_SESSION above, put it back
          to the original URL. */
       if (old_url)
-        SVN_ERR(svn_ra_reparent(ra_session, old_url, pool));
+        SVN_ERR(svn_ra_reparent(ra_session, old_url, iterpool));
 
       /* Combine whatever older and younger filtered mergeinfo exists
          into filtered_mergeinfo. */
       if (filtered_mergeinfo && filtered_younger_mergeinfo)
         SVN_ERR(svn_mergeinfo_merge(filtered_mergeinfo,
-                                    filtered_younger_mergeinfo, pool));
+                                    filtered_younger_mergeinfo, iterpool));
       else if (filtered_younger_mergeinfo)
         filtered_mergeinfo = filtered_younger_mergeinfo;
 


Reply via email to