You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ko...@apache.org on 2017/07/31 15:43:03 UTC

svn commit: r1803546 - /subversion/trunk/subversion/libsvn_delta/svndiff.c

Author: kotkov
Date: Mon Jul 31 15:43:03 2017
New Revision: 1803546

URL: http://svn.apache.org/viewvc?rev=1803546&view=rev
Log:
Following up on r1803140, comment on why the memory usage of the new
svn_txdelta_to_svndiff_stream() function is limited, and on the fact
that we rely on the implementation detail of svn_txdelta_to_svndiff3().

See the related discussion in:
  https://lists.apache.org/thread.html/51c8418956457d2739e2672340fbcacc86d9ee40be7f8dae447e998d@%3Cdev.subversion.apache.org%3E

* subversion/libsvn_delta/svndiff.c
  (window_handler, svndiff_stream_write_fn, svn_txdelta_to_svndiff_stream):
  Add comments and cross-link them.

Modified:
    subversion/trunk/subversion/libsvn_delta/svndiff.c

Modified: subversion/trunk/subversion/libsvn_delta/svndiff.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/svndiff.c?rev=1803546&r1=1803545&r2=1803546&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/svndiff.c (original)
+++ subversion/trunk/subversion/libsvn_delta/svndiff.c Mon Jul 31 15:43:03 2017
@@ -245,6 +245,8 @@ encode_window(svn_stringbuf_t **instruct
   return SVN_NO_ERROR;
 }
 
+/* Note: When changing things here, check the related comment in
+   the svn_txdelta_to_svndiff_stream() function.  */
 static svn_error_t *
 window_handler(svn_txdelta_window_t *window, void *baton)
 {
@@ -1009,6 +1011,9 @@ svndiff_stream_write_fn(void *baton, con
 {
   svndiff_stream_baton_t *b = baton;
 
+  /* The memory usage here is limited, as this buffer doesn't grow
+     beyond the (header size + max window size in svndiff format).
+     See the comment in svn_txdelta_to_svndiff_stream().  */
   svn_stringbuf_appendbytes(b->window_buffer, data, *len);
 
   return SVN_NO_ERROR;
@@ -1076,6 +1081,12 @@ svn_txdelta_to_svndiff_stream(svn_txdelt
   push_stream = svn_stream_create(baton, pool);
   svn_stream_set_write(push_stream, svndiff_stream_write_fn);
 
+  /* We rely on the implementation detail of the svn_txdelta_to_svndiff3()
+     function, namely, on how the window_handler() function behaves.
+     As long as it writes one svndiff window at a time to the target
+     stream, the memory usage of this function (in other words, how
+     much data can be accumulated in the internal 'window_buffer')
+     is limited.  */
   svn_txdelta_to_svndiff3(&baton->handler, &baton->handler_baton,
                           push_stream, svndiff_version,
                           compression_level, pool);