diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-09-22 20:59:45 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-09-22 20:59:45 +0000 |
commit | 2c0ef6c6164a9d10836e2d11940e8e7b5af6f0d5 (patch) | |
tree | 76352b764f1d3d3a3952d1c7f79a68fad04f2164 /pym/cache/flat_hash.py | |
parent | 8cbc9ceaf541042727f7931fc617746cbf2bc1d5 (diff) | |
download | portage-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.py | 16 |
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 |