diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-05-25 13:45:57 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-05-25 13:45:57 +0000 |
commit | 87066d75a2e1026f39e81aa9d5c555b571295b70 (patch) | |
tree | e6304ee267f05f065ac223dc17f02fc42e2e0b0d /java/src/Freeze/SharedDbEnv.java | |
parent | adding listener for assertion failures (diff) | |
download | ice-87066d75a2e1026f39e81aa9d5c555b571295b70.tar.bz2 ice-87066d75a2e1026f39e81aa9d5c555b571295b70.tar.xz ice-87066d75a2e1026f39e81aa9d5c555b571295b70.zip |
Renamed existing Freeze Evictor to BackgroundSaveEvictor and added new
TransactionalEvictor
Diffstat (limited to 'java/src/Freeze/SharedDbEnv.java')
-rw-r--r-- | java/src/Freeze/SharedDbEnv.java | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/java/src/Freeze/SharedDbEnv.java b/java/src/Freeze/SharedDbEnv.java index 60c7a70dd97..11233f95536 100644 --- a/java/src/Freeze/SharedDbEnv.java +++ b/java/src/Freeze/SharedDbEnv.java @@ -198,12 +198,57 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable _key.communicator.getLogger().error("Freeze database error in DbEnv \"" + _key.envName + "\": " + message); } - protected void - finalize() + + // + // EvictorContext factory/manager + // + + + // + // Get/create an evictor context associated with the calling thread + // + synchronized TransactionalEvictorContextI + getOrCreateCurrent(Ice.BooleanHolder created) { - assert(_refCount == 0); + if(created != null) + { + created.value = false; + } + + Object k = Thread.currentThread(); + + TransactionalEvictorContextI ctx = (TransactionalEvictorContextI)_ctxMap.get(k); + if(ctx == null) + { + ctx = new TransactionalEvictorContextI(this); + + if(created != null) + { + created.value = true; + } + _ctxMap.put(k, ctx); + } + return ctx; + } + + synchronized TransactionalEvictorContextI + getCurrent() + { + Object k = Thread.currentThread(); + return (TransactionalEvictorContextI)_ctxMap.get(k); + } + + // + // Clear evictor context associated with the calling thread + // + synchronized void + clearCurrent(TransactionalEvictorContextI oldCtx) + { + Object removedCtx = _ctxMap.remove(Thread.currentThread()); + assert removedCtx == oldCtx; } + private SharedDbEnv(MapKey key, com.sleepycat.db.Environment dbEnv) throws com.sleepycat.db.DatabaseException @@ -363,6 +408,8 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable private int _kbyte = 0; private Thread _thread; + private java.util.Map _ctxMap = new java.util.HashMap(); + // // Hash map of (MapKey, SharedDbEnv) // |