I #if'd out the child/parent section at the end of parse_local_abspath
that we talked about on IRC, and confirmed the test failures that you
saw. Digging in, it turns out that we end up calling "owns lock" with
two different wcroot_t structures. IOW, the wcroot that opened/owns
the lock is attached to one directory, but another directory ends up
with its own wcroot_t which has no "owned" locks associated with it,
so things blow up because the code believes some other process is
working on that other directory.
With the old PDH code in there, we get the wcroot inserted into PDH
structures all the way up to the root. Any lookup thereafter will
share the same wcroot_t structure.
As we discussed on IRC, if a move is made to a more pure lookup of
wcroot_t ancestors, then it could solve this particular problem.
Your conversion of dir_data to wcroot pointers may run into a similar
problem. I don't know enough about your change to truly know, but be
aware of the problem. An SVN_DBG in create_wcroot could provide a lot
of information (generally, it should only ever be called once per
I'm putting this on hold now because I don't want to interfere with
your work. A suggested fix would be to switch wcroot_parse to a new
algorithm that cleans out the PDH concept and more directly identifies
(and reuses!) a parent wcroot. I'd be happy to coordinate that rewrite
Received on 2011-02-25 08:54:49 CET