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