You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/03/10 15:06:23 UTC
svn commit: r1665557 - /subversion/trunk/subversion/libsvn_ra_svn/client.c
Author: rhuijben
Date: Tue Mar 10 14:06:22 2015
New Revision: 1665557
URL: http://svn.apache.org/r1665557
Log:
Minor improvements to ra-svn stability around interrupting log-like
requests from the callback.
* subversion/libsvn_ra_svn/client.c
(perform_ra_svn_log): Look further than first svn_error_t.
(ra_svn_get_location_segments): Rename to...
(perform_get_location_segments): ... this to improve error handler.
Specialize a cease invocation error, like from the log callback
(ra_svn_get_location_segments): New function around
perform_get_location_segments.
Modified:
subversion/trunk/subversion/libsvn_ra_svn/client.c
Modified: subversion/trunk/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/client.c?rev=1665557&r1=1665556&r2=1665557&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/client.c Tue Mar 10 14:06:22 2015
@@ -1806,7 +1806,7 @@ perform_ra_svn_log(svn_error_t **outer_e
SVN_PROP_REVISION_LOG, message);
err = receiver(receiver_baton, log_entry, iterpool);
- if (err && err->apr_err == SVN_ERR_CEASE_INVOCATION)
+ if (svn_error_find_cause(err, SVN_ERR_CEASE_INVOCATION))
{
*outer_error = svn_error_trace(
svn_error_compose_create(*outer_error, err));
@@ -1994,14 +1994,15 @@ static svn_error_t *ra_svn_get_locations
}
static svn_error_t *
-ra_svn_get_location_segments(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t start_rev,
- svn_revnum_t end_rev,
- svn_location_segment_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool)
+perform_get_location_segments(svn_error_t **outer_error,
+ svn_ra_session_t *session,
+ const char *path,
+ svn_revnum_t peg_revision,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ svn_location_segment_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
{
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
@@ -2048,7 +2049,17 @@ ra_svn_get_location_segments(svn_ra_sess
segment->path = ret_path;
segment->range_start = range_start;
segment->range_end = range_end;
- SVN_ERR(receiver(segment, receiver_baton, iterpool));
+
+ if (!*outer_error)
+ {
+ svn_error_t *err = svn_error_trace(receiver(segment, receiver_baton,
+ iterpool));
+
+ if (svn_error_find_cause(err, SVN_ERR_CEASE_INVOCATION))
+ *outer_error = err;
+ else
+ SVN_ERR(err);
+ }
}
}
svn_pool_destroy(iterpool);
@@ -2060,6 +2071,26 @@ ra_svn_get_location_segments(svn_ra_sess
return SVN_NO_ERROR;
}
+static svn_error_t *
+ra_svn_get_location_segments(svn_ra_session_t *session,
+ const char *path,
+ svn_revnum_t peg_revision,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ svn_location_segment_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
+{
+ svn_error_t *outer_err = SVN_NO_ERROR;
+ svn_error_t *err;
+
+ err = svn_error_trace(
+ perform_get_location_segments(&outer_err, session, path,
+ peg_revision, start_rev, end_rev,
+ receiver, receiver_baton, pool));
+ return svn_error_compose_create(outer_err, err);
+}
+
static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
const char *path,
svn_revnum_t start, svn_revnum_t end,