summaryrefslogtreecommitdiff
path: root/java/src/Freeze/SharedDbEnv.java
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2004-12-31 02:54:43 +0000
committerBernard Normier <bernard@zeroc.com>2004-12-31 02:54:43 +0000
commit7ace851791cc7442cf72e6eaa7d8a23610c6426b (patch)
tree4127b019e89f7c06856ca595ce084a766fd33be3 /java/src/Freeze/SharedDbEnv.java
parentwait until acceptor is closed to prevent an assertion failure in (diff)
downloadice-7ace851791cc7442cf72e6eaa7d8a23610c6426b.tar.bz2
ice-7ace851791cc7442cf72e6eaa7d8a23610c6426b.tar.xz
ice-7ace851791cc7442cf72e6eaa7d8a23610c6426b.zip
Fixed deadlock
Diffstat (limited to 'java/src/Freeze/SharedDbEnv.java')
-rw-r--r--java/src/Freeze/SharedDbEnv.java20
1 files changed, 17 insertions, 3 deletions
diff --git a/java/src/Freeze/SharedDbEnv.java b/java/src/Freeze/SharedDbEnv.java
index 3b76ca23921..38a99bad36d 100644
--- a/java/src/Freeze/SharedDbEnv.java
+++ b/java/src/Freeze/SharedDbEnv.java
@@ -16,9 +16,11 @@ class SharedDbEnv implements com.sleepycat.db.DbErrorHandler, Runnable
{
MapKey key = new MapKey(envName, communicator);
+ SharedDbEnv result;
+
synchronized(_map)
{
- SharedDbEnv result = (SharedDbEnv) _map.get(key);
+ result = (SharedDbEnv)_map.get(key);
if(result == null)
{
try
@@ -40,8 +42,13 @@ class SharedDbEnv implements com.sleepycat.db.DbErrorHandler, Runnable
{
result._refCount++;
}
- return result;
}
+
+ //
+ // Make sure the result if fully initialized
+ //
+ result.init();
+ return result;
}
public String
@@ -304,10 +311,17 @@ class SharedDbEnv implements com.sleepycat.db.DbErrorHandler, Runnable
}
}
- _catalog = SharedDb.openCatalog(this);
_refCount = 1;
}
+ private synchronized void init()
+ {
+ if(_catalog == null)
+ {
+ _catalog = SharedDb.openCatalog(this);
+ }
+ }
+
private static String
errorPrefix(String envName)
{