Author: ivan
Date: Fri Aug 23 13:26:32 2013
New Revision: 1516843

URL: http://svn.apache.org/r1516843
Log:
On reuse-ra-session branch: Fix progress reporting for reused sessions.

* subversion/libsvn_client/ra_cache.c
  (cached_session_t): Add LAST_PROGRESS and PROGRESS.
  (progress_func): Accumulate PROGRESS and report it to real callback.
  (svn_client__ra_cache_open_session): Reset PROGRESS when session reused.

Modified:
    subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c

Modified: 
subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c?rev=1516843&r1=1516842&r2=1516843&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c 
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c 
Fri Aug 23 13:26:32 2013
@@ -53,6 +53,12 @@ typedef struct cached_session_s
 
   /* ID of RA session. Used only for diagnostics purpose. */
   int id;
+
+  /* Last progress reported by this session. */
+  apr_off_t last_progress;
+
+  /* Accumulated progress since last session open. */
+  apr_off_t progress;
 } cached_session_t;
 
 struct svn_client__ra_cache_s
@@ -250,8 +256,11 @@ progress_func(apr_off_t progress,
 {
   cached_session_t *b = baton;
 
+  b->progress += (progress - b->last_progress);
+  b->last_progress = progress;
+
   if (b->cb_table->progress_func)
-    b->cb_table->progress_func(progress, total, b->cb_table->progress_baton,
+    b->cb_table->progress_func(b->progress, -1, b->cb_table->progress_baton,
                                pool);
 }
 
@@ -385,6 +394,7 @@ svn_client__ra_cache_open_session(svn_ra
   cache_entry->owner_pool = result_pool;
   cache_entry->cb_table = cbtable;
   cache_entry->cb_baton = callback_baton;
+  cache_entry->progress = 0;
   apr_pool_cleanup_register(result_pool, cache_entry, cleanup_session,
                             apr_pool_cleanup_null);
 


Reply via email to