You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/12/06 01:10:46 UTC

svn commit: r1548334 - in /subversion/trunk/subversion/svn: log-cmd.c mergeinfo-cmd.c

Author: breser
Date: Fri Dec  6 00:10:46 2013
New Revision: 1548334

URL: http://svn.apache.org/r1548334
Log:
Allocate the merge_stack array for the log receivers on demand.

This ends up saving a tiny amount of memory when log is called without -g and
for mergeinfo --log.

* subversion/svn/log-cmd.c
  (svn_cl__log_entry_receiver, svn_cl__log_entry_receiver_xml):  Check the
    merge_stack member before use and make an array if it hasn't already been
    made before adding a member.
  (svn_cl__log): Initialize the merge_stack member of the baton to NULL.

* subversion/svn/mergeinfo-cmd.c
  (mergeinfo_log): Initialize the merge_stack member of the baton to NULL.

Modified:
    subversion/trunk/subversion/svn/log-cmd.c
    subversion/trunk/subversion/svn/mergeinfo-cmd.c

Modified: subversion/trunk/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/log-cmd.c?rev=1548334&r1=1548333&r2=1548334&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/log-cmd.c (original)
+++ subversion/trunk/subversion/svn/log-cmd.c Fri Dec  6 00:10:46 2013
@@ -307,7 +307,9 @@ svn_cl__log_entry_receiver(void *baton,
 
   if (! SVN_IS_VALID_REVNUM(log_entry->revision))
     {
-      apr_array_pop(lb->merge_stack);
+      if (lb->merge_stack)
+        apr_array_pop(lb->merge_stack);
+
       return SVN_NO_ERROR;
     }
 
@@ -331,7 +333,12 @@ svn_cl__log_entry_receiver(void *baton,
                               log_entry->changed_paths2, pool))
     {
       if (log_entry->has_children)
-        APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+        {
+          if (! lb->merge_stack)
+            lb->merge_stack = apr_array_make(lb->pool, 1, sizeof(svn_revnum_t));
+
+          APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+        }
 
       return SVN_NO_ERROR;
     }
@@ -389,7 +396,7 @@ svn_cl__log_entry_receiver(void *baton,
         }
     }
 
-  if (lb->merge_stack->nelts > 0)
+  if (lb->merge_stack && lb->merge_stack->nelts > 0)
     {
       int i;
 
@@ -437,7 +444,12 @@ svn_cl__log_entry_receiver(void *baton,
     }
 
   if (log_entry->has_children)
-    APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+    {
+      if (! lb->merge_stack)
+        lb->merge_stack = apr_array_make(lb->pool, 1, sizeof(svn_revnum_t));
+
+      APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+    }
 
   return SVN_NO_ERROR;
 }
@@ -504,7 +516,8 @@ svn_cl__log_entry_receiver_xml(void *bat
     {
       svn_xml_make_close_tag(&sb, pool, "logentry");
       SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
-      apr_array_pop(lb->merge_stack);
+      if (lb->merge_stack)
+        apr_array_pop(lb->merge_stack);
 
       return SVN_NO_ERROR;
     }
@@ -515,7 +528,12 @@ svn_cl__log_entry_receiver_xml(void *bat
                               log_entry->changed_paths2, pool))
     {
       if (log_entry->has_children)
-        APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+        {
+          if (! lb->merge_stack)
+            lb->merge_stack = apr_array_make(lb->pool, 1, sizeof(svn_revnum_t));
+
+          APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+        }
 
       return SVN_NO_ERROR;
     }
@@ -624,7 +642,12 @@ svn_cl__log_entry_receiver_xml(void *bat
     }
 
   if (log_entry->has_children)
-    APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+    {
+      if (! lb->merge_stack)
+        lb->merge_stack = apr_array_make(lb->pool, 1, sizeof(svn_revnum_t));
+
+      APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+    }
   else
     svn_xml_make_close_tag(&sb, pool, "logentry");
 
@@ -752,7 +775,7 @@ svn_cl__log(apr_getopt_t *os,
   lb.depth = opt_state->depth == svn_depth_unknown ? svn_depth_infinity
                                                    : opt_state->depth;
   lb.diff_extensions = opt_state->extensions;
-  lb.merge_stack = apr_array_make(pool, 0, sizeof(svn_revnum_t));
+  lb.merge_stack = NULL;
   lb.search_patterns = opt_state->search_patterns;
   lb.pool = pool;
 

Modified: subversion/trunk/subversion/svn/mergeinfo-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/mergeinfo-cmd.c?rev=1548334&r1=1548333&r2=1548334&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/mergeinfo-cmd.c (original)
+++ subversion/trunk/subversion/svn/mergeinfo-cmd.c Fri Dec  6 00:10:46 2013
@@ -304,7 +304,7 @@ mergeinfo_log(svn_boolean_t finding_merg
       baton->show_diff = FALSE;
       baton->depth = depth;
       baton->diff_extensions = NULL;
-      baton->merge_stack = apr_array_make(pool, 0, sizeof(svn_revnum_t));
+      baton->merge_stack = NULL; 
       baton->search_patterns = NULL;
       baton->pool = pool;
       log_receiver_baton = baton;