summaryrefslogtreecommitdiffstats
path: root/pym/cache/flat_hash.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-09-22 20:59:45 +0000
committerZac Medico <zmedico@gentoo.org>2006-09-22 20:59:45 +0000
commit2c0ef6c6164a9d10836e2d11940e8e7b5af6f0d5 (patch)
tree76352b764f1d3d3a3952d1c7f79a68fad04f2164 /pym/cache/flat_hash.py
parent8cbc9ceaf541042727f7931fc617746cbf2bc1d5 (diff)
downloadportage-2c0ef6c6164a9d10836e2d11940e8e7b5af6f0d5.tar.gz
portage-2c0ef6c6164a9d10836e2d11940e8e7b5af6f0d5.tar.bz2
portage-2c0ef6c6164a9d10836e2d11940e8e7b5af6f0d5.zip
Use fstat to when retrieve cache timestamps and avoid a race.
svn path=/main/trunk/; revision=4501
Diffstat (limited to 'pym/cache/flat_hash.py')
-rw-r--r--pym/cache/flat_hash.py16
1 files changed, 3 insertions, 13 deletions
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