You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2015/09/21 12:14:13 UTC

svn commit: r1704255 - in /subversion/trunk: ./ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_fs_x/ tools/dev/

Author: ivan
Date: Mon Sep 21 10:14:00 2015
New Revision: 1704255

URL: http://svn.apache.org/viewvc?rev=1704255&view=rev
Log:
Revert r1704048 (merge of 'reuse-ra-session' branch): unfortunately the code
is not ready for trunk. The most serious problem that we cannot assume that
API user doesn't change svn_client_ctx_t fields like AUTH_BATON or
OPEN_TUNNEL_FUNC between svn_client_*() functions invocation. JavaHL bindings
is one example of usage of such pattern.

I'll revive 'reuse-ra-session' branch and attempt to fix these problems there.

Discussion: "Merge ra-reuse-session branch to trunk or not?" [1]
http://svn.haxx.se/dev/archive-2015-09/0173.shtml

Removed:
    subversion/trunk/subversion/libsvn_client/ra_cache.c
    subversion/trunk/subversion/libsvn_client/ra_cache.h
    subversion/trunk/tools/dev/ra-cache-summary.py
Modified:
    subversion/trunk/   (props changed)
    subversion/trunk/subversion/include/private/svn_client_private.h
    subversion/trunk/subversion/libsvn_client/add.c
    subversion/trunk/subversion/libsvn_client/blame.c
    subversion/trunk/subversion/libsvn_client/cat.c
    subversion/trunk/subversion/libsvn_client/checkout.c
    subversion/trunk/subversion/libsvn_client/client.h
    subversion/trunk/subversion/libsvn_client/commit.c
    subversion/trunk/subversion/libsvn_client/copy.c
    subversion/trunk/subversion/libsvn_client/copy_foreign.c
    subversion/trunk/subversion/libsvn_client/ctx.c
    subversion/trunk/subversion/libsvn_client/delete.c
    subversion/trunk/subversion/libsvn_client/diff.c
    subversion/trunk/subversion/libsvn_client/export.c
    subversion/trunk/subversion/libsvn_client/externals.c
    subversion/trunk/subversion/libsvn_client/import.c
    subversion/trunk/subversion/libsvn_client/info.c
    subversion/trunk/subversion/libsvn_client/iprops.c
    subversion/trunk/subversion/libsvn_client/list.c
    subversion/trunk/subversion/libsvn_client/locking_commands.c
    subversion/trunk/subversion/libsvn_client/log.c
    subversion/trunk/subversion/libsvn_client/merge.c
    subversion/trunk/subversion/libsvn_client/mergeinfo.c
    subversion/trunk/subversion/libsvn_client/mtcc.c
    subversion/trunk/subversion/libsvn_client/prop_commands.c
    subversion/trunk/subversion/libsvn_client/ra.c
    subversion/trunk/subversion/libsvn_client/status.c
    subversion/trunk/subversion/libsvn_client/switch.c
    subversion/trunk/subversion/libsvn_client/update.c
    subversion/trunk/subversion/libsvn_client/util.c
    subversion/trunk/subversion/libsvn_fs_x/   (props changed)

Propchange: subversion/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Sep 21 10:14:00 2015
@@ -69,7 +69,6 @@
 /subversion/branches/ra_serf-digest-authn:875693-876404
 /subversion/branches/reintegrate-improvements:873853-874164
 /subversion/branches/remote-only-status:1581845-1586090
-/subversion/branches/reuse-ra-session:1501802-1704029
 /subversion/branches/revprop-cache:1298521-1326293
 /subversion/branches/revprop-caching-ng:1620597,1620599
 /subversion/branches/revprop-packing:1143907,1143971,1143997,1144017,1144499,1144568,1146145

Modified: subversion/trunk/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_client_private.h?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_client_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_client_private.h Mon Sep 21 10:14:00 2015
@@ -183,10 +183,6 @@ svn_client__pathrev_fspath(const svn_cli
    Use authentication baton cached in CTX to authenticate against the
    repository.
 
-   The caller may return *RA_SESSION_P to RA session cache by explicit
-   svn_client__ra_session_release() call. Otherwise RA session will be
-   closed on pool cleanup and will not be reused.
-
    Use POOL for all allocations. */
 svn_error_t *
 svn_client__ra_session_from_path2(svn_ra_session_t **ra_session_p,
@@ -198,18 +194,6 @@ svn_client__ra_session_from_path2(svn_ra
                                  svn_client_ctx_t *ctx,
                                  apr_pool_t *pool);
 
-/* Release repository access SESSION back to CTX's session cache.
-
-   The caller *MUST* ensure that SESSION is in a valid state:
-     - it has a valid connection to the server;
-     - if using a stateful protocol (i.e., ra_svn), a new series
-       of commands can be safely begun;
-     - any previous errors did not make the session unusable.
-*/
-svn_error_t *
-svn_client__ra_session_release(svn_client_ctx_t *ctx,
-                               svn_ra_session_t *session);
-
 /* Given PATH_OR_URL, which contains either a working copy path or an
    absolute URL, a peg revision PEG_REVISION, and a desired revision
    REVISION, find the path at which that object exists in REVISION,

Modified: subversion/trunk/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/add.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/add.c (original)
+++ subversion/trunk/subversion/libsvn_client/add.c Mon Sep 21 10:14:00 2015
@@ -1198,9 +1198,7 @@ mkdir_urls(const apr_array_header_t *url
     }
 
   /* Close the edit. */
-  SVN_ERR(editor->close_edit(edit_baton, pool));
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-  return SVN_NO_ERROR;
+  return svn_error_trace(editor->close_edit(edit_baton, pool));
 }
 
 

Modified: subversion/trunk/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/blame.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/blame.c (original)
+++ subversion/trunk/subversion/libsvn_client/blame.c Mon Sep 21 10:14:00 2015
@@ -972,6 +972,5 @@ svn_client_blame5(const char *target,
     }
   svn_pool_destroy(iterpool);
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_client/cat.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/cat.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/cat.c (original)
+++ subversion/trunk/subversion/libsvn_client/cat.c Mon Sep 21 10:14:00 2015
@@ -333,6 +333,5 @@ svn_client_cat3(apr_hash_t **returned_pr
     /* Close the interjected stream */
     SVN_ERR(svn_stream_close(output));
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_client/checkout.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/checkout.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/checkout.c (original)
+++ subversion/trunk/subversion/libsvn_client/checkout.c Mon Sep 21 10:14:00 2015
@@ -81,7 +81,6 @@ svn_client__checkout_internal(svn_revnum
 {
   svn_node_kind_t kind;
   svn_client__pathrev_t *pathrev;
-  svn_boolean_t new_ra_session = FALSE;
 
   /* Sanity check.  Without these, the checkout is meaningless. */
   SVN_ERR_ASSERT(local_abspath != NULL);
@@ -123,7 +122,6 @@ svn_client__checkout_internal(svn_revnum
       SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev,
                                                 url, NULL, peg_revision,
                                                 revision, ctx, scratch_pool));
-      new_ra_session = TRUE;
     }
 
   SVN_ERR(svn_ra_check_path(ra_session, "", pathrev->rev, &kind, scratch_pool));
@@ -194,8 +192,6 @@ svn_client__checkout_internal(svn_revnum
                                       FALSE, FALSE, ra_session,
                                       ctx, scratch_pool));
 
-  if (new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/client.h?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/client.h (original)
+++ subversion/trunk/subversion/libsvn_client/client.h Mon Sep 21 10:14:00 2015
@@ -46,9 +46,6 @@ extern "C" {
 #endif /* __cplusplus */
 
 
-/* RA session cache */
-typedef struct svn_client__ra_cache_t svn_client__ra_cache_t;
-
 /* Private client context.
  *
  * This is what is actually allocated by svn_client_create_context2(),
@@ -66,9 +63,6 @@ typedef struct svn_client__private_ctx_t
   /* Total number of bytes transferred over network across all RA sessions. */
   apr_off_t total_progress;
 
-  /* The RA session cache. */
-  svn_client__ra_cache_t *ra_cache;
-
   /* The public context. */
   svn_client_ctx_t public_ctx;
 } svn_client__private_ctx_t;

Modified: subversion/trunk/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit.c Mon Sep 21 10:14:00 2015
@@ -386,6 +386,9 @@ determine_lock_targets(apr_array_header_
 /* Baton for check_url_kind */
 struct check_url_kind_baton
 {
+  apr_pool_t *pool;
+  svn_ra_session_t *session;
+  const char *repos_root_url;
   svn_client_ctx_t *ctx;
 };
 
@@ -398,19 +401,21 @@ check_url_kind(void *baton,
                apr_pool_t *scratch_pool)
 {
   struct check_url_kind_baton *cukb = baton;
-  svn_ra_session_t *ra_session;
-
-  /* Open RA session: RA session cache framework will reuse existing
-     session if possible. */
-  SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL, cukb->ctx,
-                                      scratch_pool, scratch_pool));
-
-  SVN_ERR(svn_ra_check_path(ra_session, "", revision, kind, scratch_pool));
 
-  /* Release RA session to cache. */
-  SVN_ERR(svn_client__ra_session_release(cukb->ctx, ra_session));
+  /* If we don't have a session or can't use the session, get one */
+  if (!cukb->session || !svn_uri__is_ancestor(cukb->repos_root_url, url))
+    {
+      SVN_ERR(svn_client_open_ra_session2(&cukb->session, url, NULL, cukb->ctx,
+                                          cukb->pool, scratch_pool));
+      SVN_ERR(svn_ra_get_repos_root2(cukb->session, &cukb->repos_root_url,
+                                     cukb->pool));
+    }
+  else
+    SVN_ERR(svn_ra_reparent(cukb->session, url, scratch_pool));
 
-  return SVN_NO_ERROR;
+  return svn_error_trace(
+                svn_ra_check_path(cukb->session, "", revision,
+                                  kind, scratch_pool));
 }
 
 /* Recurse into every target in REL_TARGETS, finding committable externals
@@ -513,7 +518,7 @@ svn_client_commit6(const apr_array_heade
   const svn_delta_editor_t *editor;
   void *edit_baton;
   struct capture_baton_t cb;
-  svn_ra_session_t *ra_session = NULL;
+  svn_ra_session_t *ra_session;
   const char *log_msg;
   const char *base_abspath;
   const char *base_url;
@@ -614,6 +619,9 @@ svn_client_commit6(const apr_array_heade
     struct check_url_kind_baton cukb;
 
     /* Prepare for when we have a copy containing not-present nodes. */
+    cukb.pool = iterpool;
+    cukb.session = NULL; /* ### Can we somehow reuse session? */
+    cukb.repos_root_url = NULL;
     cukb.ctx = ctx;
 
     cmt_err = svn_error_trace(
@@ -980,10 +988,6 @@ svn_client_commit6(const apr_array_heade
 
   svn_pool_destroy(iterpool);
 
-  SVN_ERR(reconcile_errors(cmt_err, unlock_err, bump_err, pool));
-
-  if (ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-
-  return SVN_NO_ERROR;
+  return svn_error_trace(reconcile_errors(cmt_err, unlock_err, bump_err,
+                                          pool));
 }

Modified: subversion/trunk/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy.c Mon Sep 21 10:14:00 2015
@@ -435,8 +435,6 @@ pin_externals_prop(svn_string_t **pinned
               SVN_ERR(svn_ra_get_latest_revnum(external_ra_session,
                                                &latest_revnum,
                                                iterpool));
-              SVN_ERR(svn_client__ra_session_release(ctx,
-                                                     external_ra_session));
 
               external_pegrev.kind = svn_opt_revision_number;
               external_pegrev.value.number = latest_revnum;
@@ -1784,10 +1782,7 @@ repos_to_repos_copy(const apr_array_head
       SVN_ERR(svn_client__get_log_msg(&message, &tmp_file, commit_items,
                                       ctx, pool));
       if (! message)
-        {
-          SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-          return SVN_NO_ERROR;
-        }
+        return SVN_NO_ERROR;
     }
   else
     message = "";
@@ -1874,9 +1869,7 @@ repos_to_repos_copy(const apr_array_head
     }
 
   /* Close the edit. */
-  SVN_ERR(editor->close_edit(edit_baton, pool));
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-  return SVN_NO_ERROR;
+  return svn_error_trace(editor->close_edit(edit_baton, pool));
 }
 
 /* Baton for check_url_kind */
@@ -2230,7 +2223,6 @@ wc_to_repos_copy(const apr_array_header_
                                       ctx, scratch_pool));
       if (! message)
         {
-          SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
           svn_pool_destroy(iterpool);
           svn_pool_destroy(session_pool);
           return SVN_NO_ERROR;
@@ -2296,7 +2288,6 @@ wc_to_repos_copy(const apr_array_header_
                                   NULL, ctx, session_pool, session_pool),
             _("Commit failed (details follow):"));
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(iterpool);
   svn_pool_destroy(session_pool);
 
@@ -2752,8 +2743,6 @@ repos_to_wc_copy(svn_boolean_t *timestam
                             pin_externals, externals_to_pin,
                             ra_session, ctx, pool),
     ctx->wc_ctx, lock_abspath, FALSE, pool);
-
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/copy_foreign.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy_foreign.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy_foreign.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy_foreign.c Mon Sep 21 10:14:00 2015
@@ -571,6 +571,5 @@ svn_client__copy_foreign(const char *url
                                  scratch_pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_client/ctx.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/ctx.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/ctx.c (original)
+++ subversion/trunk/subversion/libsvn_client/ctx.c Mon Sep 21 10:14:00 2015
@@ -34,8 +34,8 @@
 #include "svn_error.h"
 
 #include "private/svn_wc_private.h"
+
 #include "client.h"
-#include "ra_cache.h"
 
 
 /*** Code. ***/
@@ -122,7 +122,6 @@ svn_client_create_context2(svn_client_ct
 
   SVN_ERR(svn_wc_context_create(&public_ctx->wc_ctx, cfg_config,
                                 pool, pool));
-  svn_client__ra_cache_init(private_ctx, cfg_hash, pool);
   *ctx = public_ctx;
 
   return SVN_NO_ERROR;

Modified: subversion/trunk/subversion/libsvn_client/delete.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/delete.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/delete.c (original)
+++ subversion/trunk/subversion/libsvn_client/delete.c Mon Sep 21 10:14:00 2015
@@ -411,15 +411,6 @@ delete_urls_multi_repos(const apr_array_
                                   revprop_table, commit_callback,
                                   commit_baton, ctx, iterpool));
     }
-
-  /* Release all RA sessions. */
-  for (hi = apr_hash_first(pool, deletables); hi; hi = apr_hash_next(hi))
-    {
-      struct repos_deletables_t *repos_deletables = apr_hash_this_val(hi);
-      SVN_ERR(svn_client__ra_session_release(ctx,
-                                             repos_deletables->ra_session));
-    }
-
   svn_pool_destroy(iterpool);
 
   return SVN_NO_ERROR;

Modified: subversion/trunk/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/diff.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/diff.c (original)
+++ subversion/trunk/subversion/libsvn_client/diff.c Mon Sep 21 10:14:00 2015
@@ -1847,9 +1847,8 @@ diff_repos_repos(const char **root_relpa
                              FALSE, NULL,
                              scratch_pool));
 
-  SVN_ERR(reporter->finish_report(reporter_baton, scratch_pool));
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-  return SVN_NO_ERROR;
+  return svn_error_trace(
+                  reporter->finish_report(reporter_baton, scratch_pool));
 }
 
 /* Perform a diff between a repository path and a working-copy path.
@@ -2135,7 +2134,6 @@ diff_repos_wc(const char **root_relpath,
                                       scratch_pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/export.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/export.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/export.c (original)
+++ subversion/trunk/subversion/libsvn_client/export.c Mon Sep 21 10:14:00 2015
@@ -1448,8 +1448,6 @@ svn_client_export5(svn_revnum_t *result_
                                    from_path_or_url);
         }
       /* kind == svn_node_unknown not handled */
-
-      SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
     }
   else
     {

Modified: subversion/trunk/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/externals.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/externals.c (original)
+++ subversion/trunk/subversion/libsvn_client/externals.c Mon Sep 21 10:14:00 2015
@@ -724,7 +724,6 @@ handle_external_item_change(svn_client_c
   svn_client__pathrev_t *new_loc;
   const char *new_url;
   svn_node_kind_t ext_kind;
-  svn_boolean_t new_ra_session = FALSE;
 
   SVN_ERR_ASSERT(repos_root_url && parent_dir_url);
   SVN_ERR_ASSERT(new_item != NULL);
@@ -770,14 +769,11 @@ handle_external_item_change(svn_client_c
     }
 
   if (!ra_session)
-    {
-      SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc,
-                                                new_url, NULL,
-                                                &(new_item->peg_revision),
-                                                &(new_item->revision), ctx,
-                                                scratch_pool));
-      new_ra_session = TRUE;
-    }
+    SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc,
+                                              new_url, NULL,
+                                              &(new_item->peg_revision),
+                                              &(new_item->revision), ctx,
+                                              scratch_pool));
 
   SVN_ERR(svn_ra_check_path(ra_session, "", new_loc->rev, &ext_kind,
                             scratch_pool));
@@ -875,15 +871,12 @@ handle_external_item_change(svn_client_c
             new_url = svn_path_url_add_component2(local_repos_root_url,
                                                   ext_repos_relpath,
                                                   scratch_pool);
-            if (new_ra_session)
-              SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
             SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc,
                                                       new_url,
                                                       NULL,
                                                       &(new_item->peg_revision),
                                                       &(new_item->revision),
                                                       ctx, scratch_pool));
-            new_ra_session = TRUE;
           }
 
         SVN_ERR(switch_file_external(local_abspath,
@@ -902,8 +895,6 @@ handle_external_item_change(svn_client_c
         break;
     }
 
-  if (new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/import.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/import.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/import.c (original)
+++ subversion/trunk/subversion/libsvn_client/import.c Mon Sep 21 10:14:00 2015
@@ -1006,7 +1006,6 @@ svn_client_import5(const char *path,
                     editor->abort_edit(edit_baton, scratch_pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/info.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/info.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/info.c (original)
+++ subversion/trunk/subversion/libsvn_client/info.c Mon Sep 21 10:14:00 2015
@@ -457,7 +457,6 @@ svn_client_info4(const char *abspath_or_
                             depth, ctx, locks, pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/iprops.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/iprops.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/iprops.c (original)
+++ subversion/trunk/subversion/libsvn_client/iprops.c Mon Sep 21 10:14:00 2015
@@ -139,7 +139,6 @@ get_inheritable_props(apr_hash_t **wcroo
   apr_hash_index_t *hi;
   apr_pool_t *iterpool = svn_pool_create(scratch_pool);
   apr_pool_t *session_pool = NULL;
-  const svn_boolean_t new_ra_session = !ra_session;
   *wcroot_iprops = apr_hash_make(result_pool);
 
   SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(revision));
@@ -213,19 +212,14 @@ get_inheritable_props(apr_hash_t **wcroo
             {
               if (err->apr_err != SVN_ERR_FS_NOT_FOUND)
                 return svn_error_trace(err);
-              svn_error_clear(err);
 
-              if (new_ra_session)
-                SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
+              svn_error_clear(err);
               continue;
             }
 
           svn_hash_sets(*wcroot_iprops,
                         apr_pstrdup(result_pool, child_abspath),
                         inherited_props);
-
-          if (new_ra_session)
-            SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
         }
 
 

Modified: subversion/trunk/subversion/libsvn_client/list.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/list.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/list.c (original)
+++ subversion/trunk/subversion/libsvn_client/list.c Mon Sep 21 10:14:00 2015
@@ -317,7 +317,6 @@ list_internal(const char *path_or_url,
                              ctx, pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_client/locking_commands.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/locking_commands.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/locking_commands.c (original)
+++ subversion/trunk/subversion/libsvn_client/locking_commands.c Mon Sep 21 10:14:00 2015
@@ -571,8 +571,6 @@ release_locks:
         }
     }
 
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return svn_error_trace(err);
 }
 
@@ -646,8 +644,6 @@ release_locks:
         }
     }
 
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return svn_error_trace(err);
 }
 

Modified: subversion/trunk/subversion/libsvn_client/log.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/log.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/log.c (original)
+++ subversion/trunk/subversion/libsvn_client/log.c Mon Sep 21 10:14:00 2015
@@ -106,7 +106,6 @@ svn_client__get_copy_source(const char *
   apr_pool_t *sesspool = svn_pool_create(scratch_pool);
   svn_client__pathrev_t *at_loc;
   const char *old_session_url = NULL;
-  svn_boolean_t new_ra_session = FALSE;
 
   copyfrom_info.is_first = TRUE;
   copyfrom_info.path = NULL;
@@ -119,7 +118,6 @@ svn_client__get_copy_source(const char *
                                                 path_or_url, NULL,
                                                 revision, revision,
                                                 ctx, sesspool));
-      new_ra_session = TRUE;
     }
   else
     {
@@ -164,8 +162,6 @@ svn_client__get_copy_source(const char *
                     err,
                     svn_ra_reparent(ra_session, old_session_url, sesspool));
 
-  if (!err && new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(sesspool);
 
   if (err)
@@ -834,9 +830,6 @@ run_ra_get_log(apr_array_header_t *revis
     }
   svn_pool_destroy(iterpool);
 
-  if (rb.ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, rb.ra_session));
-
   return SVN_NO_ERROR;
 }
 
@@ -953,6 +946,5 @@ svn_client_log5(const apr_array_header_t
                          include_merged_revisions, revprops,
                          real_receiver, real_receiver_baton, ctx, pool));
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Mon Sep 21 10:14:00 2015
@@ -9683,10 +9683,6 @@ ensure_ra_session_url(svn_ra_session_t *
   if (! *ra_session || (err && err->apr_err == SVN_ERR_RA_ILLEGAL_URL))
     {
       svn_error_clear(err);
-      /* RA_CACHE TODO: release RA session
-         The patch to rework RA session handling in merge is going to
-         be committed in trunk after merging:
-         http://svn.haxx.se/dev/archive-2015-02/0054.shtml */
       err = svn_client_open_ra_session2(ra_session, url, wri_abspath,
                                         ctx, pool, pool);
     }
@@ -9797,7 +9793,7 @@ do_merge(apr_hash_t **modified_subtrees,
   const char *preserved_exts_str;
   int i;
   svn_boolean_t checked_mergeinfo_capability = FALSE;
-  svn_ra_session_t *ra_session1 = NULL;
+  svn_ra_session_t *ra_session1 = NULL, *ra_session2 = NULL;
   const char *old_src_session_url = NULL;
   apr_pool_t *iterpool;
   const svn_diff_tree_processor_t *processor;
@@ -9929,7 +9925,6 @@ do_merge(apr_hash_t **modified_subtrees,
       merge_source_t *source =
         APR_ARRAY_IDX(merge_sources, i, merge_source_t *);
       single_range_conflict_report_t *conflicted_range_report;
-      svn_ra_session_t *ra_session2;
 
       svn_pool_clear(iterpool);
 
@@ -9942,10 +9937,8 @@ do_merge(apr_hash_t **modified_subtrees,
       /* Establish RA sessions to our URLs, reuse where possible. */
       SVN_ERR(ensure_ra_session_url(&ra_session1, source->loc1->url,
                                     target->abspath, ctx, scratch_pool));
-
-      SVN_ERR(svn_client_open_ra_session2(&ra_session2, source->loc2->url,
-                                          target->abspath, ctx, iterpool,
-                                          iterpool));
+      SVN_ERR(ensure_ra_session_url(&ra_session2, source->loc2->url,
+                                    target->abspath, ctx, scratch_pool));
 
       /* Populate the portions of the merge context baton that need to
          be reset for each merge source iteration. */
@@ -10021,8 +10014,6 @@ do_merge(apr_hash_t **modified_subtrees,
         }
       while (source);
 
-      SVN_ERR(svn_client__ra_session_release(ctx, ra_session2));
-
       /* The final mergeinfo on TARGET_WCPATH may itself elide. */
       if (! dry_run)
         SVN_ERR(svn_client__elide_mergeinfo(target->abspath, NULL,
@@ -10603,11 +10594,6 @@ merge_locked(conflict_report_t **conflic
                  ctx, result_pool, scratch_pool);
 
   /* Close our temporary RA sessions. */
-  if (!err)
-    {
-      SVN_ERR(svn_client__ra_session_release(ctx, ra_session2));
-      SVN_ERR(svn_client__ra_session_release(ctx, ra_session1));
-    }
   svn_pool_destroy(sesspool);
 
   if (use_sleep)
@@ -11772,12 +11758,6 @@ merge_reintegrate_locked(conflict_report
                                                ctx,
                                                result_pool, scratch_pool);
 
-  if (!err)
-    {
-      SVN_ERR(svn_client__ra_session_release(ctx, source_ra_session));
-      SVN_ERR(svn_client__ra_session_release(ctx, target_ra_session));
-    }
-
   if (use_sleep)
     svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
 
@@ -11885,8 +11865,6 @@ merge_peg_locked(conflict_report_t **con
                  ctx, result_pool, scratch_pool);
 
   /* We're done with our RA session. */
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(sesspool);
 
   if (use_sleep)
@@ -12569,9 +12547,6 @@ find_automatic_merge_no_wc(automatic_mer
   SVN_ERR(find_automatic_merge(&merge->base, &merge->is_reintegrate_like, s_t,
                                ctx, result_pool, scratch_pool));
 
-  SVN_ERR(svn_client__ra_session_release(ctx, s_t->target_ra_session));
-  SVN_ERR(svn_client__ra_session_release(ctx, s_t->source_ra_session));
-
   merge->right = s_t->source;
   merge->target = &s_t->target->loc;
   merge->yca = s_t->yca;
@@ -12652,10 +12627,6 @@ client_find_automatic_merge(automatic_me
 
   SVN_ERR(find_automatic_merge(&merge->base, &merge->is_reintegrate_like, s_t,
                                ctx, result_pool, scratch_pool));
-
-  SVN_ERR(svn_client__ra_session_release(ctx, s_t->source_ra_session));
-  SVN_ERR(svn_client__ra_session_release(ctx, s_t->target_ra_session));
-
   merge->yca = s_t->yca;
   merge->right = s_t->source;
   merge->target = &s_t->target->loc;
@@ -12665,6 +12636,8 @@ client_find_automatic_merge(automatic_me
 
   *merge_p = merge;
 
+  /* TODO: Close the source and target sessions here? */
+
   return SVN_NO_ERROR;
 }
 
@@ -12724,8 +12697,9 @@ do_automatic_merge_locked(conflict_repor
   if (reintegrate_like)
     {
       merge_source_t source;
-      svn_ra_session_t *base_ra_session;
-      svn_ra_session_t *right_ra_session;
+      svn_ra_session_t *base_ra_session = NULL;
+      svn_ra_session_t *right_ra_session = NULL;
+      svn_ra_session_t *target_ra_session = NULL;
 
       if (record_only)
         return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
@@ -12745,38 +12719,29 @@ do_automatic_merge_locked(conflict_repor
                                   "and the force_delete option "
                                   "cannot be used with this kind of merge"));
 
-      SVN_ERR(svn_client_open_ra_session2(&right_ra_session, merge->right->url,
-                                          target->abspath, ctx, scratch_pool,
-                                          scratch_pool));
+      SVN_ERR(ensure_ra_session_url(&base_ra_session, merge->base->url,
+                                    target->abspath, ctx, scratch_pool));
+      SVN_ERR(ensure_ra_session_url(&right_ra_session, merge->right->url,
+                                    target->abspath, ctx, scratch_pool));
+      SVN_ERR(ensure_ra_session_url(&target_ra_session, target->loc.url,
+                                    target->abspath, ctx, scratch_pool));
 
       /* Check for and reject any abnormalities -- such as revisions that
        * have not yet been merged in the opposite direction -- that a
        * 'reintegrate' merge would have rejected. */
       {
         merge_source_t *source2;
-        svn_ra_session_t *target_ra_session;
-
-        SVN_ERR(svn_client_open_ra_session2(&target_ra_session,
-                                            target->loc.url, target->abspath,
-                                            ctx, scratch_pool, scratch_pool));
 
         SVN_ERR(find_reintegrate_merge(&source2, NULL,
                                        right_ra_session, merge->right,
                                        target_ra_session, target,
                                        ctx, scratch_pool, scratch_pool));
-
-        SVN_ERR(svn_client__ra_session_release(ctx, target_ra_session));
       }
 
       source.loc1 = merge->base;
       source.loc2 = merge->right;
       source.ancestral = ! merge->is_reintegrate_like;
 
-      SVN_ERR(svn_client_open_ra_session2(&base_ra_session,
-                                          merge->base->url,
-                                          target->abspath, ctx, scratch_pool,
-                                          scratch_pool));
-
       err = merge_cousins_and_supplement_mergeinfo(conflict_report,
                                                    &use_sleep,
                                                    target,
@@ -12791,11 +12756,6 @@ do_automatic_merge_locked(conflict_repor
                                                    merge_options,
                                                    ctx,
                                                    result_pool, scratch_pool);
-      if (!err)
-        {
-          SVN_ERR(svn_client__ra_session_release(ctx, base_ra_session));
-          SVN_ERR(svn_client__ra_session_release(ctx, right_ra_session));
-        }
     }
   else /* ! merge->is_reintegrate_like */
     {
@@ -12809,13 +12769,12 @@ do_automatic_merge_locked(conflict_repor
          find the base for each sutree, and then here use the oldest base
          among all subtrees. */
       apr_array_header_t *merge_sources;
-      svn_ra_session_t *ra_session;
+      svn_ra_session_t *ra_session = NULL;
 
       /* Normalize our merge sources, do_merge() requires this.  See the
          'MERGEINFO MERGE SOURCE NORMALIZATION' global comment. */
-      SVN_ERR(svn_client_open_ra_session2(&ra_session, merge->right->url,
-                                          target->abspath, ctx, scratch_pool,
-                                          scratch_pool));
+      SVN_ERR(ensure_ra_session_url(&ra_session, merge->right->url,
+                                    target->abspath, ctx, scratch_pool));
       SVN_ERR(normalize_merge_sources_internal(
         &merge_sources, merge->right,
         svn_rangelist__initialize(merge->yca->rev, merge->right->rev, TRUE,
@@ -12829,8 +12788,6 @@ do_automatic_merge_locked(conflict_repor
                      force_delete, dry_run,
                      record_only, NULL, FALSE, FALSE, depth, merge_options,
                      ctx, result_pool, scratch_pool);
-      if (!err)
-        SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
     }
 
   if (use_sleep)

Modified: subversion/trunk/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mergeinfo.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Mon Sep 21 10:14:00 2015
@@ -679,12 +679,15 @@ svn_client__get_wc_or_repos_mergeinfo_ca
                                             result_pool, scratch_pool));
           if (!svn_hash_gets(original_props, SVN_PROP_MERGEINFO))
             {
-              const svn_boolean_t new_ra_session = !ra_session;
+              apr_pool_t *sesspool = NULL;
 
-              if (new_ra_session)
-                SVN_ERR(svn_client_open_ra_session2(
-                            &ra_session, url, NULL, ctx,
-                            scratch_pool, scratch_pool));
+              if (! ra_session)
+                {
+                  sesspool = svn_pool_create(scratch_pool);
+                  SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
+                                                      ctx,
+                                                      sesspool, sesspool));
+                }
 
               SVN_ERR(svn_client__get_repos_mergeinfo_catalog(
                         &target_mergeinfo_cat_repos, ra_session,
@@ -704,8 +707,10 @@ svn_client__get_wc_or_repos_mergeinfo_ca
               /* If we created an RA_SESSION above, destroy it.
                  Otherwise, if reparented an existing session, point
                  it back where it was when we were called. */
-              if (new_ra_session)
-                SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
+              if (sesspool)
+                {
+                  svn_pool_destroy(sesspool);
+                }
             }
         }
     }
@@ -1038,7 +1043,6 @@ get_mergeinfo(svn_mergeinfo_catalog_t *m
   const char *local_abspath;
   svn_boolean_t use_url = svn_path_is_url(path_or_url);
   svn_client__pathrev_t *peg_loc;
-  svn_boolean_t new_ra_session = FALSE;
 
   if (ra_session && svn_path_is_url(path_or_url))
     {
@@ -1055,7 +1059,6 @@ get_mergeinfo(svn_mergeinfo_catalog_t *m
                                                 path_or_url, NULL,
                                                 peg_revision,
                                                 peg_revision, ctx, scratch_pool));
-      new_ra_session = TRUE;
     }
 
   /* If PATH_OR_URL is as working copy path determine if we will need to
@@ -1094,8 +1097,6 @@ get_mergeinfo(svn_mergeinfo_catalog_t *m
         result_pool, scratch_pool));
     }
 
-  if (new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 
@@ -1516,7 +1517,6 @@ logs_for_mergeinfo_rangelist(const char
   svn_merge_range_t *oldest_range, *youngest_range;
   svn_revnum_t oldest_rev, youngest_rev;
   struct filter_log_entry_baton_t fleb;
-  svn_boolean_t new_ra_session = FALSE;
 
   if (! rangelist->nelts)
     return SVN_NO_ERROR;
@@ -1552,12 +1552,9 @@ logs_for_mergeinfo_rangelist(const char
   fleb.ctx = ctx;
 
   if (!ra_session)
-    {
-      SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, source_url,
-                                                   NULL, NULL, FALSE, FALSE, ctx,
-                                                   scratch_pool, scratch_pool));
-      new_ra_session = TRUE;
-    }
+    SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, source_url,
+                                                 NULL, NULL, FALSE, FALSE, ctx,
+                                                 scratch_pool, scratch_pool));
   else
     SVN_ERR(svn_ra_reparent(ra_session, source_url, scratch_pool));
 
@@ -1578,9 +1575,6 @@ logs_for_mergeinfo_rangelist(const char
                             scratch_pool));
   }
 
-  if (new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-
   /* Check for cancellation. */
   if (ctx->cancel_func)
     SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
@@ -1712,7 +1706,6 @@ svn_client__mergeinfo_log(svn_boolean_t
   apr_hash_index_t *hi;
   apr_pool_t *iterpool;
   svn_boolean_t oldest_revs_first = TRUE;
-  svn_boolean_t new_target_session = FALSE;
   apr_pool_t *subpool;
 
   /* We currently only support depth = empty | infinity. */
@@ -1780,7 +1773,6 @@ svn_client__mergeinfo_log(svn_boolean_t
                                                         target_peg_revision,
                                                         target_peg_revision,
                                                         ctx, subpool));
-              new_target_session = TRUE;
             }
           SVN_ERR(svn_ra_get_repos_root2(target_session, &repos_root,
                                          scratch_pool));
@@ -1857,20 +1849,16 @@ svn_client__mergeinfo_log(svn_boolean_t
    * should share a single session, tracking the two URLs separately. */
   {
     svn_ra_session_t *source_session;
-    svn_boolean_t new_source_session = FALSE;
     svn_revnum_t start_rev, end_rev, youngest_rev = SVN_INVALID_REVNUM;
 
     if (! finding_merged)
       {
         if (!target_session)
-          {
-            SVN_ERR(svn_client__ra_session_from_path2(&target_session, &pathrev,
-                                                      target_path_or_url, NULL,
-                                                      target_peg_revision,
-                                                      target_peg_revision,
-                                                      ctx, subpool));
-            new_target_session = TRUE;
-          }
+          SVN_ERR(svn_client__ra_session_from_path2(&target_session, &pathrev,
+                                                    target_path_or_url, NULL,
+                                                    target_peg_revision,
+                                                    target_peg_revision,
+                                                    ctx, subpool));
         SVN_ERR(svn_client__get_history_as_mergeinfo(&target_history, NULL,
                                                      pathrev,
                                                      SVN_INVALID_REVNUM,
@@ -1900,7 +1888,6 @@ svn_client__mergeinfo_log(svn_boolean_t
                                                   source_peg_revision,
                                                   source_peg_revision,
                                                   ctx, subpool));
-        new_source_session = TRUE;
       }
     SVN_ERR(svn_client__get_revision_number(&start_rev, &youngest_rev,
                                             ctx->wc_ctx, source_path_or_url,
@@ -1920,10 +1907,6 @@ svn_client__mergeinfo_log(svn_boolean_t
                                                  scratch_pool));
     if (start_rev > end_rev)
       oldest_revs_first = FALSE;
-
-    /* Release the source session */
-    if (new_source_session)
-      SVN_ERR(svn_client__ra_session_release(ctx, source_session));
   }
 
   /* Separate the explicit or inherited mergeinfo on TARGET_PATH_OR_URL,
@@ -2194,9 +2177,7 @@ svn_client__mergeinfo_log(svn_boolean_t
                                        log_receiver, log_receiver_baton,
                                        ctx, target_session, scratch_pool);
 
-    /* Release or close the target session. */
-    if (!err && new_target_session)
-      SVN_ERR(svn_client__ra_session_release(ctx, target_session));
+    /* Close the source and target sessions. */
     svn_pool_destroy(subpool); /* For SVN_ERR_CEASE_INVOCATION */
 
     return svn_error_trace(err);
@@ -2310,7 +2291,6 @@ svn_client_suggest_merge_sources(apr_arr
         }
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(session_pool);
 
   *suggestions = list;

Modified: subversion/trunk/subversion/libsvn_client/mtcc.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mtcc.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mtcc.c (original)
+++ subversion/trunk/subversion/libsvn_client/mtcc.c Mon Sep 21 10:14:00 2015
@@ -1423,8 +1423,6 @@ svn_client__mtcc_commit(apr_hash_t *revp
     err = svn_error_compose_create(err,
                                    editor->abort_edit(edit_baton, scratch_pool));
 
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(mtcc->ctx, mtcc->ra_session));
   svn_pool_destroy(mtcc->pool);
 
   return svn_error_trace(err);

Modified: subversion/trunk/subversion/libsvn_client/prop_commands.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/prop_commands.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/prop_commands.c (original)
+++ subversion/trunk/subversion/libsvn_client/prop_commands.c Mon Sep 21 10:14:00 2015
@@ -250,9 +250,7 @@ propset_on_url(const char *propname,
       ctx->notify_func2(ctx->notify_baton2, notify, pool);
     }
   /* Close the edit. */
-  SVN_ERR(editor->close_edit(edit_baton, pool));
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-  return SVN_NO_ERROR;
+  return editor->close_edit(edit_baton, pool);
 }
 
 /* Check that PROPNAME is a valid name for a versioned property.  Return an
@@ -513,8 +511,6 @@ svn_client_revprop_set2(const char *prop
                                     original_propval, propval, pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-
   if (ctx->notify_func2)
     {
       svn_wc_notify_t *notify = svn_wc_create_notify_url(URL,
@@ -859,6 +855,7 @@ svn_client_propget5(apr_hash_t **props,
   if ((inherited_props && !local_iprops)
       || !local_explicit_props)
     {
+      svn_ra_session_t *ra_session;
       svn_node_kind_t kind;
       svn_opt_revision_t new_operative_rev;
       svn_opt_revision_t new_peg_rev;
@@ -936,7 +933,6 @@ svn_client_propget5(apr_hash_t **props,
       /* Do we still have anything to ask the repository about? */
       if (!local_explicit_props || !local_iprops)
         {
-          svn_ra_session_t *ra_session;
           svn_client__pathrev_t *loc;
 
           /* Get an RA plugin for this filesystem object. */
@@ -959,7 +955,6 @@ svn_client_propget5(apr_hash_t **props,
                                  kind, loc->rev, ra_session,
                                  depth, result_pool, scratch_pool));
           revnum = loc->rev;
-          SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
         }
     }
 
@@ -995,8 +990,6 @@ svn_client_revprop_get(const char *propn
   err = svn_ra_rev_prop(ra_session, *set_rev, propname, propval, pool);
 
   /* Close RA session */
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(subpool);
   return svn_error_trace(err);
 }
@@ -1365,8 +1358,6 @@ get_remote_props(const char *path_or_url
                           depth, receiver, receiver_baton,
                           ctx->cancel_func, ctx->cancel_baton,
                           scratch_pool));
-
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 
@@ -1577,10 +1568,6 @@ svn_client_revprop_list(apr_hash_t **pro
   err = svn_ra_rev_proplist(ra_session, *set_rev, &proplist, pool);
 
   *props = proplist;
-
-  /* Close RA session */
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-  svn_pool_destroy(subpool);
+  svn_pool_destroy(subpool); /* Close RA session */
   return svn_error_trace(err);
 }

Modified: subversion/trunk/subversion/libsvn_client/ra.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/ra.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/ra.c (original)
+++ subversion/trunk/subversion/libsvn_client/ra.c Mon Sep 21 10:14:00 2015
@@ -38,7 +38,6 @@
 #include "svn_mergeinfo.h"
 #include "client.h"
 #include "mergeinfo.h"
-#include "ra_cache.h"
 
 #include "svn_private_config.h"
 #include "private/svn_wc_private.h"
@@ -419,10 +418,10 @@ svn_client__open_ra_session_internal(svn
 
           /* Try to open the RA session.  If this is our last attempt,
              don't accept corrected URLs from the RA provider. */
-          SVN_ERR(svn_client__ra_cache_open_session(
-                      ra_session, attempts_left == 0 ? NULL : &corrected,
-                      ctx, base_url, uuid, cbtable, cb,
-                      result_pool, scratch_pool));
+          SVN_ERR(svn_ra_open4(ra_session,
+                               attempts_left == 0 ? NULL : &corrected,
+                               base_url, uuid, cbtable, cb, ctx->config,
+                               result_pool));
 
           /* No error and no corrected URL?  We're done here. */
           if (! corrected)
@@ -454,9 +453,8 @@ svn_client__open_ra_session_internal(svn
     }
   else
     {
-      SVN_ERR(svn_client__ra_cache_open_session(
-                  ra_session, NULL, ctx, base_url, uuid, cbtable,
-                  cb, result_pool, scratch_pool));
+      SVN_ERR(svn_ra_open4(ra_session, NULL, base_url,
+                           uuid, cbtable, cb, ctx->config, result_pool));
     }
 
   return SVN_NO_ERROR;
@@ -802,7 +800,6 @@ svn_client__repos_locations(const char *
   svn_revnum_t peg_revnum = SVN_INVALID_REVNUM;
   svn_revnum_t start_revnum, end_revnum;
   svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
-  svn_boolean_t new_ra_session = FALSE;
   apr_pool_t *subpool = svn_pool_create(pool);
 
   /* Ensure that we are given some real revision data to work with.
@@ -883,11 +880,8 @@ svn_client__repos_locations(const char *
 
   /* Open a RA session to this URL if we don't have one already. */
   if (! ra_session)
-    {
-      SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
-                                          ctx, subpool, subpool));
-      new_ra_session = TRUE;
-    }
+    SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
+                                        ctx, subpool, subpool));
 
   /* Resolve the opt_revision_ts. */
   if (peg_revnum == SVN_INVALID_REVNUM)
@@ -919,9 +913,6 @@ svn_client__repos_locations(const char *
                           ra_session, url, peg_revnum,
                           start_revnum, end_revnum, youngest_rev,
                           pool, subpool));
-
-  if (new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(subpool);
   return SVN_NO_ERROR;
 }
@@ -1008,10 +999,10 @@ svn_client__get_youngest_common_ancestor
                                          apr_pool_t *result_pool,
                                          apr_pool_t *scratch_pool)
 {
+  apr_pool_t *sesspool = NULL;
   apr_hash_t *history1, *history2;
   svn_boolean_t has_rev_zero_history1;
   svn_boolean_t has_rev_zero_history2;
-  svn_boolean_t new_ra_session = FALSE;
 
   if (strcmp(loc1->repos_root_url, loc2->repos_root_url) != 0)
     {
@@ -1022,9 +1013,9 @@ svn_client__get_youngest_common_ancestor
   /* Open an RA session for the two locations. */
   if (session == NULL)
     {
+      sesspool = svn_pool_create(scratch_pool);
       SVN_ERR(svn_client_open_ra_session2(&session, loc1->url, NULL, ctx,
-                                          scratch_pool, scratch_pool));
-      new_ra_session = TRUE;
+                                          sesspool, sesspool));
     }
 
   /* We're going to cheat and use history-as-mergeinfo because it
@@ -1041,10 +1032,9 @@ svn_client__get_youngest_common_ancestor
                                                SVN_INVALID_REVNUM,
                                                SVN_INVALID_REVNUM,
                                                session, ctx, scratch_pool));
-
   /* Close the ra session if we opened one. */
-  if (new_ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, session));
+  if (sesspool)
+    svn_pool_destroy(sesspool);
 
   SVN_ERR(svn_client__calc_youngest_common_ancestor(ancestor_p,
                                                     loc1, history1,
@@ -1198,11 +1188,3 @@ svn_client__ra_make_cb_baton(svn_wc_cont
 
   return reb;
 }
-
-svn_error_t *
-svn_client__ra_session_release(svn_client_ctx_t *ctx,
-                               svn_ra_session_t *session)
-{
-    svn_client__ra_cache_release_session(ctx, session);
-    return SVN_NO_ERROR;
-}

Modified: subversion/trunk/subversion/libsvn_client/status.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/status.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/status.c (original)
+++ subversion/trunk/subversion/libsvn_client/status.c Mon Sep 21 10:14:00 2015
@@ -185,11 +185,13 @@ reporter_finish_report(void *report_bato
   svn_ra_session_t *ras;
   apr_hash_t *locks;
   const char *repos_root;
+  apr_pool_t *subpool = svn_pool_create(pool);
   svn_error_t *err = SVN_NO_ERROR;
 
-  /* Open an RA session to our common ancestor and grab the locks under it. */
+  /* Open an RA session to our common ancestor and grab the locks under it.
+   */
   SVN_ERR(svn_client_open_ra_session2(&ras, rb->ancestor, NULL,
-                                      rb->ctx, pool, pool));
+                                      rb->ctx, subpool, subpool));
 
   /* The locks need to live throughout the edit.  Note that if the
      server doesn't support lock discovery, we'll just not do locky
@@ -206,7 +208,7 @@ reporter_finish_report(void *report_bato
   SVN_ERR(svn_ra_get_repos_root2(ras, &repos_root, rb->pool));
 
   /* Close the RA session. */
-  SVN_ERR(svn_client__ra_session_release(rb->ctx, ras));
+  svn_pool_destroy(subpool);
 
   SVN_ERR(svn_wc_status_set_repos_locks(rb->set_locks_baton, locks,
                                         repos_root, rb->pool));
@@ -569,8 +571,6 @@ svn_client_status6(svn_revnum_t *result_
                                           NULL, NULL, pool));
         }
 
-      SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-
       if (ctx->notify_func2)
         {
           svn_wc_notify_t *notify

Modified: subversion/trunk/subversion/libsvn_client/switch.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/switch.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/switch.c (original)
+++ subversion/trunk/subversion/libsvn_client/switch.c Mon Sep 21 10:14:00 2015
@@ -369,8 +369,6 @@ switch_internal(svn_revnum_t *result_rev
                                            ctx, pool));
     }
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-
   /* Let everyone know we're finished here. */
   if (ctx->notify_func2)
     {

Modified: subversion/trunk/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/update.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/update.c (original)
+++ subversion/trunk/subversion/libsvn_client/update.c Mon Sep 21 10:14:00 2015
@@ -570,7 +570,6 @@ svn_client__update_internal(svn_revnum_t
   svn_opt_revision_t peg_revision = *revision;
   apr_hash_t *conflicted_paths
     = ctx->conflict_func2 ? apr_hash_make(pool) : NULL;
-  const svn_boolean_t new_ra_session = !ra_session;
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
   SVN_ERR_ASSERT(! (innerupdate && make_parents));
@@ -666,8 +665,6 @@ svn_client__update_internal(svn_revnum_t
             err,
             svn_wc__release_write_lock(ctx->wc_ctx, lockroot_abspath, pool));
 
-  if (!err && new_ra_session && ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return svn_error_trace(err);
 }
 

Modified: subversion/trunk/subversion/libsvn_client/util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/util.c?rev=1704255&r1=1704254&r2=1704255&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/util.c (original)
+++ subversion/trunk/subversion/libsvn_client/util.c Mon Sep 21 10:14:00 2015
@@ -288,7 +288,6 @@ svn_client_get_repos_root(const char **r
   if (repos_uuid)
     SVN_ERR(svn_ra_get_uuid2(ra_session, repos_uuid, result_pool));
 
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return SVN_NO_ERROR;
 }
 

Propchange: subversion/trunk/subversion/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Sep 21 10:14:00 2015
@@ -67,7 +67,6 @@
 /subversion/branches/ra_serf-digest-authn/subversion/libsvn_fs_x:875693-876404
 /subversion/branches/reintegrate-improvements/subversion/libsvn_fs_x:873853-874164
 /subversion/branches/remote-only-status/subversion/libsvn_fs_x:1581845-1586090
-/subversion/branches/reuse-ra-session/subversion/libsvn_fs_x:1516837-1704029
 /subversion/branches/revprop-cache/subversion/libsvn_fs_x:1298521-1326293
 /subversion/branches/revprop-caching-ng/subversion/libsvn_fs_fs:1619782-1620595
 /subversion/branches/revprop-caching-ng/subversion/libsvn_fs_x:1620597