Author: brane
Date: Thu Feb  5 14:21:16 2015
New Revision: 1657574

URL: http://svn.apache.org/r1657574
Log:
On the reuse-ra-session branch: Fix some instances where a session could be
released whilst leaving an orphaned svn_error_t or locked working copy.

Found by: ivan
          me

* subversion/libsvn_client/iprops.c (get_inheritable_props),
  subversion/libsvn_client/locking_commands.c (svn_client_lock, 
svn_client_unlock),
  subversion/libsvn_client/merge.c (merge_locked, merge_reintegrate_locked),
  subversion/libsvn_client/prop_commands.c (svn_client_revprop_get),
  subversion/libsvn_client/update.c (svn_client__update_internal):
   Release RA sessions more carefully.

Modified:
    subversion/branches/reuse-ra-session/subversion/libsvn_client/iprops.c
    
subversion/branches/reuse-ra-session/subversion/libsvn_client/locking_commands.c
    subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c
    
subversion/branches/reuse-ra-session/subversion/libsvn_client/prop_commands.c
    subversion/branches/reuse-ra-session/subversion/libsvn_client/update.c

Modified: subversion/branches/reuse-ra-session/subversion/libsvn_client/iprops.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/iprops.c?rev=1657574&r1=1657573&r2=1657574&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/iprops.c 
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/iprops.c Thu 
Feb  5 14:21:16 2015
@@ -213,10 +213,10 @@ 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;
             }
 

Modified: 
subversion/branches/reuse-ra-session/subversion/libsvn_client/locking_commands.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/locking_commands.c?rev=1657574&r1=1657573&r2=1657574&view=diff
==============================================================================
--- 
subversion/branches/reuse-ra-session/subversion/libsvn_client/locking_commands.c
 (original)
+++ 
subversion/branches/reuse-ra-session/subversion/libsvn_client/locking_commands.c
 Thu Feb  5 14:21:16 2015
@@ -554,8 +554,6 @@ svn_client_lock(const apr_array_header_t
   /* Lock the paths. */
   err = svn_ra_lock(ra_session, path_revs, comment,
                     steal_lock, store_locks_callback, &cb, pool);
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
 
 release_locks:
   if (lock_abspaths)
@@ -573,6 +571,8 @@ release_locks:
         }
     }
 
+  if (!err)
+    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return svn_error_trace(err);
 }
 
@@ -629,8 +629,6 @@ svn_client_unlock(const apr_array_header
   /* Unlock the paths. */
   err = svn_ra_unlock(ra_session, path_tokens, break_lock,
                       store_locks_callback, &cb, pool);
-  if (!err)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
 
 release_locks:
   if (lock_abspaths)
@@ -648,6 +646,8 @@ release_locks:
         }
     }
 
+  if (!err)
+    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   return svn_error_trace(err);
 }
 

Modified: subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c?rev=1657574&r1=1657573&r2=1657574&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c 
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/merge.c Thu 
Feb  5 14:21:16 2015
@@ -10533,8 +10533,11 @@ merge_locked(conflict_report_t **conflic
                  ctx, result_pool, scratch_pool);
 
   /* Close our temporary RA sessions. */
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session2));
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session1));
+  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)
@@ -11697,8 +11700,11 @@ merge_reintegrate_locked(conflict_report
                                                ctx,
                                                result_pool, scratch_pool);
 
-  SVN_ERR(svn_client__ra_session_release(ctx, source_ra_session));
-  SVN_ERR(svn_client__ra_session_release(ctx, target_ra_session));
+  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);

Modified: 
subversion/branches/reuse-ra-session/subversion/libsvn_client/prop_commands.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/prop_commands.c?rev=1657574&r1=1657573&r2=1657574&view=diff
==============================================================================
--- 
subversion/branches/reuse-ra-session/subversion/libsvn_client/prop_commands.c 
(original)
+++ 
subversion/branches/reuse-ra-session/subversion/libsvn_client/prop_commands.c 
Thu Feb  5 14:21:16 2015
@@ -1016,7 +1016,8 @@ svn_client_revprop_get(const char *propn
   err = svn_ra_rev_prop(ra_session, *set_rev, propname, propval, pool);
 
   /* Close RA session */
-  SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
+  if (!err)
+    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
   svn_pool_destroy(subpool);
   return svn_error_trace(err);
 }

Modified: subversion/branches/reuse-ra-session/subversion/libsvn_client/update.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/update.c?rev=1657574&r1=1657573&r2=1657574&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/update.c 
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/update.c Thu 
Feb  5 14:21:16 2015
@@ -662,13 +662,12 @@ svn_client__update_internal(svn_revnum_t
     }
 
  cleanup:
-  if (!err && new_ra_session && ra_session)
-    SVN_ERR(svn_client__ra_session_release(ctx, ra_session));
-
   err = svn_error_compose_create(
             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);
 }
 


Reply via email to