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)
{