s...@apache.org writes: > Author: stsp > Date: Fri Jan 22 22:50:42 2010 > New Revision: 902303
> +svn_error_t * > +svn_wc__call_with_write_lock(svn_wc__with_write_lock_func_t func, > + void *baton, > + svn_wc_context_t *wc_ctx, > + const char *local_abspath, > + apr_pool_t *result_pool, > + apr_pool_t *scratch_pool) > +{ > + SVN_ERR(svn_wc__acquire_write_lock(NULL, wc_ctx, local_abspath, > + scratch_pool, scratch_pool)); > + return svn_error_compose_create( > + func(baton, result_pool, scratch_pool), > + svn_wc__release_write_lock(wc_ctx, local_abspath, scratch_pool)); > +} That's not going to work because the two function calls func() and svn_wc__release_write_lock() are not evaluated in any particular order. It needs to be something like: Index: subversion/libsvn_wc/lock.c =================================================================== --- subversion/libsvn_wc/lock.c (revision 903527) +++ subversion/libsvn_wc/lock.c (working copy) @@ -1857,9 +1857,10 @@ apr_pool_t *result_pool, apr_pool_t *scratch_pool) { + svn_error_t *err1, *err2; SVN_ERR(svn_wc__acquire_write_lock(NULL, wc_ctx, local_abspath, scratch_pool, scratch_pool)); - return svn_error_compose_create( - func(baton, result_pool, scratch_pool), - svn_wc__release_write_lock(wc_ctx, local_abspath, scratch_pool)); + err1 = func(baton, result_pool, scratch_pool); + err2 = svn_wc__release_write_lock(wc_ctx, local_abspath, scratch_pool); + return svn_error_compose_create(err1, err2); } However, if I make that change I get several test failures: $ ../../../../src/subversion/tests/cmdline/patch_tests.py --parallel F.FF.F. The tests pass if I reverse the two function calls but obviously that makes the locking pointless: Index: subversion/libsvn_wc/lock.c =================================================================== --- subversion/libsvn_wc/lock.c (revision 903527) +++ subversion/libsvn_wc/lock.c (working copy) @@ -1857,9 +1857,10 @@ apr_pool_t *result_pool, apr_pool_t *scratch_pool) { + svn_error_t *err1, *err2; SVN_ERR(svn_wc__acquire_write_lock(NULL, wc_ctx, local_abspath, scratch_pool, scratch_pool)); - return svn_error_compose_create( - func(baton, result_pool, scratch_pool), - svn_wc__release_write_lock(wc_ctx, local_abspath, scratch_pool)); + err2 = svn_wc__release_write_lock(wc_ctx, local_abspath, scratch_pool); + err1 = func(baton, result_pool, scratch_pool); + return svn_error_compose_create(err1, err2); } -- Philip