[PATCH 6 of 7 V3] caches: invalidate store caches when lock is taken

Durham Goode durham at fb.com
Tue Apr 1 17:24:16 CDT 2014


# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1395700507 25200
#      Mon Mar 24 15:35:07 2014 -0700
# Node ID a7b48af9ed3c28d20621406f90e7dddf3c4a3561
# Parent  24b8c6cd26c12a817cc316d2709d83611b684972
caches: invalidate store caches when lock is taken

The fncache was not being properly invalidated each time the lock was taken, so
in theory it could contain old data from prior to the caller having the lock.
This changes it to be invalidated as soon as the lock is taken (same as all our
other caches).

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -996,6 +996,7 @@
             except AttributeError:
                 pass
         self.invalidatecaches()
+        self.store.invalidatecaches()
 
     def invalidateall(self):
         '''Fully invalidates both store and non-store parts, causing the
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -340,6 +340,9 @@
     def write(self, tr):
         pass
 
+    def invalidatecaches(self):
+        pass
+
     def __contains__(self, path):
         '''Checks if the store contains path'''
         path = "/".join(("data", path))
@@ -489,6 +492,9 @@
     def write(self, tr):
         self.fncache.write(tr)
 
+    def invalidatecaches(self):
+        self.fncache.entries = None
+
     def _exists(self, f):
         ef = self.encode(f)
         try:


More information about the Mercurial-devel mailing list