You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/08/01 15:36:17 UTC

svn commit: r1152771 - in /subversion/branches/1.7.x: ./ STATUS subversion/libsvn_ra_serf/ra_serf.h subversion/libsvn_ra_serf/replay.c subversion/libsvn_ra_serf/serf.c subversion/libsvn_ra_serf/update.c subversion/libsvn_ra_serf/util.c

Author: hwright
Date: Mon Aug  1 13:36:15 2011
New Revision: 1152771

URL: http://svn.apache.org/viewvc?rev=1152771&view=rev
Log:
Merge r1149539 from trunk:

 * r1149539
   Resolve issue #3969: provide proper cancellation support in the
   network loops in ra_serf.
   Justifications:
     GUI clients can't rely on EINTR being returned when a user tries to cancel
     an operation, as no signal is raised.
   Votes:
     +1: rhuijben, hwright, cmpilato

Modified:
    subversion/branches/1.7.x/   (props changed)
    subversion/branches/1.7.x/STATUS
    subversion/branches/1.7.x/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/1.7.x/subversion/libsvn_ra_serf/replay.c
    subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c
    subversion/branches/1.7.x/subversion/libsvn_ra_serf/update.c
    subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c

Propchange: subversion/branches/1.7.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug  1 13:36:15 2011
@@ -54,4 +54,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147309,1147882,1148071,1148131,1148374,1148424,1148566,1148588,1148853,1148877,1148882,1148936,1149105,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149572,1149675,1149701,1149713,1150242,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151911,1152129
+/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147309,1147882,1148071,1148131,1148374,1148424,1148566,1148588,1148853,1148877,1148882,1148936,1149105,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149539,1149572,1149675,1149701,1149713,1150242,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151911,1152129

Modified: subversion/branches/1.7.x/STATUS
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1152771&r1=1152770&r2=1152771&view=diff
==============================================================================
--- subversion/branches/1.7.x/STATUS (original)
+++ subversion/branches/1.7.x/STATUS Mon Aug  1 13:36:15 2011
@@ -180,12 +180,3 @@ Approved changes:
      this revision depends for a clean merge).
    Votes:
      +1: rhuijben, danielsh, cmpilato
-
- * r1149539
-   Resolve issue #3969: provide proper cancellation support in the
-   network loops in ra_serf.
-   Justifications:
-     GUI clients can't rely on EINTR being returned when a user tries to cancel
-     an operation, as no signal is raised.
-   Votes:
-     +1: rhuijben, hwright, cmpilato

Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/ra_serf.h?rev=1152771&r1=1152770&r2=1152771&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/ra_serf.h Mon Aug  1 13:36:15 2011
@@ -139,9 +139,13 @@ struct svn_ra_serf__session_t {
   const svn_ra_callbacks2_t *wc_callbacks;
   void *wc_callback_baton;
 
-  /* Callback function to send info to WC */
-  svn_ra_progress_notify_func_t wc_progress_func;
-  void *wc_progress_baton;
+  /* Callback function to send progress info to the client */
+  svn_ra_progress_notify_func_t progress_func;
+  void *progress_baton;
+
+  /* Callback function to handle cancellation */
+  svn_cancel_func_t cancel_func;
+  void *cancel_baton;
 
   /* Error that we've received but not yet returned upstream. */
   svn_error_t *pending_error;

Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/replay.c?rev=1152771&r1=1152770&r2=1152771&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_ra_serf/replay.c (original)
+++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/replay.c Mon Aug  1 13:36:15 2011
@@ -756,6 +756,9 @@ svn_ra_serf__replay_range(svn_ra_session
          to store the response status code. */
       int status_code;
 
+      if (session->cancel_func)
+        SVN_ERR(session->cancel_func(session->cancel_baton));
+
       /* Send pending requests, if any. Limit the number of outstanding
          requests to MAX_OUTSTANDING_REQUESTS. */
       if (rev <= end_revision  && active_reports < MAX_OUTSTANDING_REQUESTS)

Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c?rev=1152771&r1=1152770&r2=1152771&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c Mon Aug  1 13:36:15 2011
@@ -326,11 +326,11 @@ static void
 svn_ra_serf__progress(void *progress_baton, apr_off_t read, apr_off_t written)
 {
   const svn_ra_serf__session_t *serf_sess = progress_baton;
-  if (serf_sess->wc_progress_func)
+  if (serf_sess->progress_func)
     {
-      serf_sess->wc_progress_func(read + written, -1,
-                                  serf_sess->wc_progress_baton,
-                                  serf_sess->pool);
+      serf_sess->progress_func(read + written, -1,
+                               serf_sess->progress_baton,
+                               serf_sess->pool);
     }
 }
 
@@ -355,8 +355,10 @@ svn_ra_serf__open(svn_ra_session_t *sess
   serf_sess->pool = svn_pool_create(pool);
   serf_sess->wc_callbacks = callbacks;
   serf_sess->wc_callback_baton = callback_baton;
-  serf_sess->wc_progress_baton = callbacks->progress_baton;
-  serf_sess->wc_progress_func = callbacks->progress_func;
+  serf_sess->progress_func = callbacks->progress_func;
+  serf_sess->progress_baton = callbacks->progress_baton;
+  serf_sess->cancel_func = callbacks->cancel_func;
+  serf_sess->cancel_baton = callback_baton;
 
   /* todo: reuse serf context across sessions */
   serf_sess->context = serf_context_create(serf_sess->pool);

Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/update.c?rev=1152771&r1=1152770&r2=1152771&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/update.c Mon Aug  1 13:36:15 2011
@@ -2361,6 +2361,9 @@ finish_report(void *report_baton,
       /* Note: this throws out the old ITERPOOL_INNER.  */
       svn_pool_clear(iterpool);
 
+      if (sess->cancel_func)
+        SVN_ERR(sess->cancel_func(sess->cancel_baton));
+
       /* We need to be careful between the outer and inner ITERPOOLs,
          and what items are allocated within.  */
       iterpool_inner = svn_pool_create(iterpool);

Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c?rev=1152771&r1=1152770&r2=1152771&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c Mon Aug  1 13:36:15 2011
@@ -685,9 +685,8 @@ svn_ra_serf__context_run_wait(svn_boolea
 
       svn_pool_clear(iterpool);
 
-      if (sess->wc_callbacks &&
-          sess->wc_callbacks->cancel_func)
-        SVN_ERR((sess->wc_callbacks->cancel_func)(sess->wc_callback_baton));
+      if (sess->cancel_func)
+        SVN_ERR((*sess->cancel_func)(sess->cancel_baton));
 
       status = serf_context_run(sess->context, sess->timeout, iterpool);