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 2010/08/06 00:06:32 UTC
svn commit: r982803 - in /subversion/trunk/subversion/libsvn_ra_serf:
replay.c update.c
Author: rhuijben
Date: Thu Aug 5 22:06:32 2010
New Revision: 982803
URL: http://svn.apache.org/viewvc?rev=982803&view=rev
Log:
Make sure we never leak the pending error stored in the session, even
when we error because we got a timeout.
* subversion/libsvn_ra_serf/replay.c
(svn_ra_serf__replay_range): Clear pending error or return it, but
never leave a pending error.
* subversion/libsvn_ra_serf/update.c
(handle_stream): Return write errors.
(finish_report): Clear pending error or return it, but never leave
a pending error.
Modified:
subversion/trunk/subversion/libsvn_ra_serf/replay.c
subversion/trunk/subversion/libsvn_ra_serf/update.c
Modified: subversion/trunk/subversion/libsvn_ra_serf/replay.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/replay.c?rev=982803&r1=982802&r2=982803&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/replay.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/replay.c Thu Aug 5 22:06:32 2010
@@ -720,6 +720,7 @@ svn_ra_serf__replay_range(svn_ra_session
while (active_reports || rev <= end_revision)
{
apr_status_t status;
+ svn_error_t *err;
svn_ra_serf__list_t *done_list;
svn_ra_serf__list_t *done_reports = NULL;
replay_context_t *replay_ctx;
@@ -804,8 +805,12 @@ svn_ra_serf__replay_range(svn_ra_session
status = serf_context_run(session->context, session->timeout,
pool);
+ err = session->pending_error;
+ session->pending_error = NULL;
+
if (APR_STATUS_IS_TIMEUP(status))
{
+ svn_error_clear(err);
return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT,
NULL,
_("Connection timed out"));
@@ -824,10 +829,9 @@ svn_ra_serf__replay_range(svn_ra_session
active_reports--;
}
+ SVN_ERR(err);
if (status)
{
- SVN_ERR(session->pending_error);
-
return svn_error_wrap_apr(status,
_("Error retrieving replay REPORT (%d)"),
status);
Modified: subversion/trunk/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/update.c?rev=982803&r1=982802&r2=982803&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/update.c Thu Aug 5 22:06:32 2010
@@ -1066,7 +1066,8 @@ handle_stream(serf_request_t *request,
written_len = len;
- svn_stream_write(fetch_ctx->target_stream, data, &written_len);
+ SVN_ERR(svn_stream_write(fetch_ctx->target_stream, data,
+ &written_len));
}
if (APR_STATUS_IS_EOF(status))
@@ -2306,17 +2307,23 @@ finish_report(void *report_baton,
while (!report->done || report->active_fetches || report->active_propfinds)
{
+ svn_error_t *err;
status = serf_context_run(sess->context, sess->timeout, pool);
+
+ err = sess->pending_error;
+ sess->pending_error = SVN_NO_ERROR;
+
if (APR_STATUS_IS_TIMEUP(status))
{
+ svn_error_clear(err);
return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT,
NULL,
_("Connection timed out"));
}
+
+ SVN_ERR(err);
if (status)
{
- SVN_ERR(sess->pending_error);
-
return svn_error_wrap_apr(status, _("Error retrieving REPORT (%d)"),
status);
}