diff options
Diffstat (limited to 'java/src/IceUtil/Cache.java')
-rw-r--r-- | java/src/IceUtil/Cache.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/java/src/IceUtil/Cache.java b/java/src/IceUtil/Cache.java index 1fb36b30fce..c19003bfb28 100644 --- a/java/src/IceUtil/Cache.java +++ b/java/src/IceUtil/Cache.java @@ -174,7 +174,27 @@ public class Cache } else { - Object obj = _store.load(key); + Object obj; + try + { + obj = _store.load(key); + } + catch(RuntimeException e) + { + synchronized(_map) + { + _map.remove(key); + latch = val.latch; + val.latch = null; + } + if(latch != null) + { + latch.countDown(); + assert latch.getCount() == 0; + } + throw e; + } + synchronized(_map) { if(obj != null) |