diff options
author | Bernard Normier <bernard@zeroc.com> | 2004-12-31 02:54:43 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2004-12-31 02:54:43 +0000 |
commit | 7ace851791cc7442cf72e6eaa7d8a23610c6426b (patch) | |
tree | 4127b019e89f7c06856ca595ce084a766fd33be3 /java/src/Freeze/SharedDbEnv.java | |
parent | wait until acceptor is closed to prevent an assertion failure in (diff) | |
download | ice-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.java | 20 |
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) { |