summaryrefslogtreecommitdiff
path: root/java/src/IceUtil/Cache.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceUtil/Cache.java')
-rw-r--r--java/src/IceUtil/Cache.java22
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)