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);