Author: ivan
Date: Fri Feb  6 13:13:14 2015
New Revision: 1657797

URL: http://svn.apache.org/r1657797
Log:
On the reuse-ra-session branch: Avoid svn_ra_reparent() call and network 
round-trip for svn:// protocol if possible.

* subversion/libsvn_client/ra_cache.c
  (find_session_by_url): Try to find RA session with exact session URL 
   match first.

Modified:
    subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c

Modified: 
subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c?rev=1657797&r1=1657796&r2=1657797&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c 
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/ra_cache.c 
Fri Feb  6 13:13:14 2015
@@ -401,6 +401,24 @@ find_session_by_url(cache_entry_t **cach
 {
   cache_entry_t *cache_entry;
 
+  /* Try to find RA session with exact session URL match first because
+   * the svn_ra_reparent() for svn:// protocol requires network round-trip.
+   */
+  APR_RING_FOREACH(cache_entry, &ra_cache->freelist,
+                   cache_entry_t, freelist)
+    {
+      const char *session_url;
+      SVN_ERR_ASSERT(cache_entry->owner_pool == NULL);
+
+      SVN_ERR(svn_ra_get_session_url(cache_entry->session, &session_url,
+                                     scratch_pool));
+      if (strcmp(session_url, url) == 0)
+        {
+          *cache_entry_p = cache_entry;
+          return SVN_NO_ERROR;
+        }
+    }
+
   APR_RING_FOREACH(cache_entry, &ra_cache->freelist,
                    cache_entry_t, freelist)
     {


Reply via email to