summaryrefslogtreecommitdiff
path: root/java/src/Freeze/MapInternal/MapI.java
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2013-01-29 09:26:34 +0100
committerBenoit Foucher <benoit@zeroc.com>2013-01-29 09:26:34 +0100
commit0c86c3b2013261eb55347317474310831892a8fa (patch)
treec8b61f87cd4235b02a41c2b76c8939e9ef9f039d /java/src/Freeze/MapInternal/MapI.java
parentFixed Ice for Python/Ruby/PHP to not copy data from output stream (diff)
downloadice-0c86c3b2013261eb55347317474310831892a8fa.tar.bz2
ice-0c86c3b2013261eb55347317474310831892a8fa.tar.xz
ice-0c86c3b2013261eb55347317474310831892a8fa.zip
Fixed ICE-5128: Freeze map clear failure
Diffstat (limited to 'java/src/Freeze/MapInternal/MapI.java')
-rw-r--r--java/src/Freeze/MapInternal/MapI.java50
1 files changed, 46 insertions, 4 deletions
diff --git a/java/src/Freeze/MapInternal/MapI.java b/java/src/Freeze/MapInternal/MapI.java
index 8e1dacf2db5..f46a70bf0b6 100644
--- a/java/src/Freeze/MapInternal/MapI.java
+++ b/java/src/Freeze/MapInternal/MapI.java
@@ -757,8 +757,8 @@ public abstract class MapI<K, V> extends java.util.AbstractMap<K, V>
{
if(_trace.deadlockWarning)
{
- _trace.logger.warning("Deadlock in Freeze.MapInternal.MapI.containsValue while " + "iterating over Db \"" +
- _dbName + "\"; retrying...");
+ _trace.logger.warning("Deadlock in Freeze.MapInternal.MapI.containsValue while " +
+ "iterating over Db \"" + _dbName + "\"; retrying...");
}
//
@@ -898,13 +898,55 @@ public abstract class MapI<K, V> extends java.util.AbstractMap<K, V>
}
com.sleepycat.db.Transaction txn = _connection.dbTxn();
+ if(txn == null)
+ {
+ closeAllIterators();
+ }
+ com.sleepycat.db.DatabaseEntry keyEntry = new com.sleepycat.db.DatabaseEntry();
+ keyEntry.setPartial(true);
+
+ com.sleepycat.db.DatabaseEntry valueEntry = new com.sleepycat.db.DatabaseEntry();
+ valueEntry.setPartial(true);
+
for(;;)
{
try
{
- _db.db().truncate(txn, false);
- break;
+ com.sleepycat.db.Cursor dbc = null;
+ Transaction tx = null;
+ try
+ {
+ if(txn == null)
+ {
+ tx = _connection.beginTransaction();
+ txn = _connection.dbTxn();
+ }
+
+ dbc = _db.db().openCursor(txn, null);
+ while(dbc.getNext(keyEntry, valueEntry, null) == com.sleepycat.db.OperationStatus.SUCCESS)
+ {
+ dbc.delete();
+ }
+ break;
+ }
+ finally
+ {
+ try
+ {
+ if(dbc != null)
+ {
+ dbc.close();
+ }
+ }
+ finally
+ {
+ if(tx != null)
+ {
+ tx.commit();
+ }
+ }
+ }
}
catch(com.sleepycat.db.DeadlockException e)
{