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