From 2c0ef6c6164a9d10836e2d11940e8e7b5af6f0d5 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 22 Sep 2006 20:59:45 +0000 Subject: Use fstat to when retrieve cache timestamps and avoid a race. svn path=/main/trunk/; revision=4501 --- pym/cache/flat_hash.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) (limited to 'pym/cache/flat_hash.py') diff --git a/pym/cache/flat_hash.py b/pym/cache/flat_hash.py index df8043c2d..bf5140c10 100644 --- a/pym/cache/flat_hash.py +++ b/pym/cache/flat_hash.py @@ -23,16 +23,7 @@ class database(fs_template.FsBased): def __getitem__(self, cpv): fp = os.path.join(self.location, cpv) - try: - def curry(*args): - def callit(*args2): - return args[0](*args[1:]+args2) - return callit - return ProtectedDict(LazyLoad(curry(self._pull, fp, cpv), - initial_items=[("_mtime_", long(os.stat(fp).st_mtime))])) - except OSError: - raise KeyError(cpv) - return self._getitem(cpv) + return self._pull(fp, cpv) def _pull(self, fp, cpv): try: @@ -43,6 +34,7 @@ class database(fs_template.FsBased): raise cache_errors.CacheCorruption(cpv, e) try: d = self._parse_data(myf, cpv) + d["_mtime_"] = long(os.fstat(myf.fileno()).st_mtime) except (OSError, ValueError), e: myf.close() raise cache_errors.CacheCorruption(cpv, e) @@ -50,10 +42,8 @@ class database(fs_template.FsBased): return d - def _parse_data(self, data, cpv, mtime=0): + def _parse_data(self, data, cpv): d = dict(map(lambda x:x.rstrip().split("=", 1), data)) - if mtime != 0: - d["_mtime_"] = long(mtime) if "_eclasses_" in d: d["_eclasses_"] = reconstruct_eclasses(cpv, d["_eclasses_"]) return d -- cgit v1.2.3-1-g7c22