Mercurial > hg
changeset 24744:bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Before this change, any call to 'wlock' after we acquired a 'lock' was issuing a
warning. This is wrong as the 'wlock' have been properly acquired before the
'lock' in a previous call.
We move the warning code to only issue such warnings when we are acquiring the
'wlock' -after- acquiring 'lock'. This is the expected behavior of this warning
from the start.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sun, 12 Apr 2015 10:01:48 -0400 |
parents | a2ef1dc3b59b |
children | bc34b286781f |
files | mercurial/localrepo.py tests/test-devel-warnings.t |
diffstat | 2 files changed, 22 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Sat Apr 11 17:30:45 2015 -0400 +++ b/mercurial/localrepo.py Sun Apr 12 10:01:48 2015 -0400 @@ -1204,6 +1204,11 @@ '''Lock the non-store parts of the repository (everything under .hg except .hg/store) and return a weak reference to the lock. Use this before modifying files in .hg.''' + l = self._wlockref and self._wlockref() + if l is not None and l.held: + l.lock() + return l + if (self.ui.configbool('devel', 'all') or self.ui.configbool('devel', 'check-locks')): l = self._lockref and self._lockref() @@ -1213,10 +1218,6 @@ util.debugstacktrace(msg, 1) else: self.ui.write_err(msg) - l = self._wlockref and self._wlockref() - if l is not None and l.held: - l.lock() - return l def unlock(): if self.dirstate.pendingparentchange():
--- a/tests/test-devel-warnings.t Sat Apr 11 17:30:45 2015 -0400 +++ b/tests/test-devel-warnings.t Sun Apr 12 10:01:48 2015 -0400 @@ -15,6 +15,22 @@ > wl = repo.wlock() > wl.release() > lo.release() + > + > @command('properlocking', [], '') + > def properlocking(ui, repo): + > """check that reentrance is fine""" + > wl = repo.wlock() + > lo = repo.lock() + > tr = repo.transaction('proper') + > tr2 = repo.transaction('proper') + > lo2 = repo.lock() + > wl2 = repo.wlock() + > wl2.release() + > lo2.release() + > tr2.close() + > tr.close() + > lo.release() + > wl.release() > EOF $ cat << EOF >> $HGRCPATH @@ -64,4 +80,5 @@ */mercurial/dispatch.py:* in <lambda> (glob) */mercurial/util.py:* in check (glob) $TESTTMP/buggylocking.py:* in buggylocking (glob) + $ hg properlocking $ cd ..