diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-02-16 15:16:10 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-02-16 15:16:10 +0000 |
| commit | 5b2abc88594d5b80e84ad62d1668618ea1d43d9f (patch) | |
| tree | c24c6ae1505820c2176568cd7723488c9bd3c107 /repoze | |
| parent | a3f4048babf761c689efbda31d8eb864316f09e4 (diff) | |
| download | pyramid-5b2abc88594d5b80e84ad62d1668618ea1d43d9f.tar.gz pyramid-5b2abc88594d5b80e84ad62d1668618ea1d43d9f.tar.bz2 pyramid-5b2abc88594d5b80e84ad62d1668618ea1d43d9f.zip | |
- lru cache was unstable under concurrency (big surprise) when it
tried to redelete a key in the cache that had already been deleted.
Symptom: line 64 in put:del data[oldkey]:KeyError: '/some/path'.
Now we just ignore the key error if we can't delete the key.
- add zip_safe = false to setup.cfg.
Diffstat (limited to 'repoze')
| -rw-r--r-- | repoze/bfg/lru.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/repoze/bfg/lru.py b/repoze/bfg/lru.py index aec1be402..b757207c8 100644 --- a/repoze/bfg/lru.py +++ b/repoze/bfg/lru.py @@ -61,7 +61,11 @@ class LRUCache(object): try: oldkey = current['key'] if oldkey is not _marker: - del data[oldkey] + try: + del data[oldkey] + except KeyError: + # XXX already deleted; seen in wild 5/16/2009? + pass current['key'] = key current['ref'] = True data[key] = (hand, val) |
