diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-06-01 23:01:01 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-06-01 23:01:01 +0000 |
commit | aba428c2e21eb34f8580804d471c19a208c8c813 (patch) | |
tree | ea0a9510a719b9e189eeddfebf0bf425075d1176 /java/src/Freeze/SharedDbEnv.java | |
parent | Replace isMulticast with macro (diff) | |
download | ice-aba428c2e21eb34f8580804d471c19a208c8c813.tar.bz2 ice-aba428c2e21eb34f8580804d471c19a208c8c813.tar.xz ice-aba428c2e21eb34f8580804d471c19a208c8c813.zip |
More transactional evictor testing
Diffstat (limited to 'java/src/Freeze/SharedDbEnv.java')
-rw-r--r-- | java/src/Freeze/SharedDbEnv.java | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/java/src/Freeze/SharedDbEnv.java b/java/src/Freeze/SharedDbEnv.java index 35940fc9425..1b2456556fe 100644 --- a/java/src/Freeze/SharedDbEnv.java +++ b/java/src/Freeze/SharedDbEnv.java @@ -216,7 +216,10 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable assert ctx == null; ctx = new TransactionalEvictorContext(this); - _refCount++; // owned by the underlying ConnectionI + synchronized(_map) + { + _refCount++; // owned by the underlying ConnectionI + } _ctxMap.put(k, ctx); return ctx; @@ -232,14 +235,34 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable synchronized void setCurrentTransaction(Transaction tx) { + TransactionI txi = (TransactionI)tx; + + if(txi != null) + { + if(txi.getConnectionI() == null || txi.getConnectionI().dbEnv() == null) + { + throw new DatabaseException(errorPrefix(_key.envName) + "invalid transaction"); + } + + // + // Check this tx refers to this DbEnv + // + if(txi.getConnectionI().dbEnv() != this) + { + throw new DatabaseException(errorPrefix(_key.envName) + + "the given transaction is bound to environment '" + + txi.getConnectionI().dbEnv()._key.envName + "'"); + } + } + Object k = Thread.currentThread(); - if(tx != null) + if(txi != null) { TransactionalEvictorContext ctx = (TransactionalEvictorContext)_ctxMap.get(k); if(ctx == null || !tx.equals(ctx.transaction())) { - ctx = new TransactionalEvictorContext((TransactionI)tx); + ctx = new TransactionalEvictorContext(txi); _ctxMap.put(k, ctx); } } @@ -401,7 +424,7 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable private com.sleepycat.db.Environment _dbEnv; private boolean _ownDbEnv; private SharedDb _catalog; - private int _refCount = 0; + private int _refCount = 0; // protected by _map! private boolean _done = false; private int _trace = 0; private long _checkpointPeriod = 0; |