On Wed, Jan 27, 2010 at 02:39:05AM +0000, Philip Martin wrote: > 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.
Oh, the order depends on the compiler, right? Good catch. > 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: Are these related to the svn_wc_notify_t-related issues you found? Can we apply your patch to fix the ordering problem? Stefan