summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/Freeze/EvictorI.cpp7
-rw-r--r--java/src/Freeze/EvictorI.java9
2 files changed, 14 insertions, 2 deletions
diff --git a/cpp/src/Freeze/EvictorI.cpp b/cpp/src/Freeze/EvictorI.cpp
index 70dd963b0b9..e0880078074 100644
--- a/cpp/src/Freeze/EvictorI.cpp
+++ b/cpp/src/Freeze/EvictorI.cpp
@@ -1396,7 +1396,12 @@ Freeze::EvictorI::run()
EvictorElementPtr& element = *q;
if(!element->stale)
{
- if(element->usageCount == 0 && element->keepCount == 0)
+ //
+ // Can be stale when there are duplicate elements on the
+ // deadObjecst queue
+ //
+
+ if(!element->stale && element->usageCount == 0 && element->keepCount == 0)
{
//
// Get rid of unused dead elements
diff --git a/java/src/Freeze/EvictorI.java b/java/src/Freeze/EvictorI.java
index 764fb58c3b7..c7fc17976d4 100644
--- a/java/src/Freeze/EvictorI.java
+++ b/java/src/Freeze/EvictorI.java
@@ -1426,6 +1426,7 @@ class EvictorI extends Ice.LocalObjectImpl implements Evictor, Runnable
for(int i = 0; i < allObjects.size(); i++)
{
EvictorElement element = (EvictorElement) allObjects.get(i);
+ assert element.usageCount > 0;
element.usageCount--;
}
allObjects.clear();
@@ -1434,7 +1435,11 @@ class EvictorI extends Ice.LocalObjectImpl implements Evictor, Runnable
while(p.hasNext())
{
EvictorElement element = (EvictorElement) p.next();
- if(element.usageCount == 0 && element.keepCount == 0)
+
+ //
+ // Can be stale when there are duplicates on the deadObjects list
+ //
+ if(!element.stale && element.usageCount == 0 && element.keepCount == 0)
{
//
// Get rid of unused dead elements
@@ -1557,6 +1562,7 @@ class EvictorI extends Ice.LocalObjectImpl implements Evictor, Runnable
assert !element.stale;
assert element.keepCount == 0;
+ assert element.evictPosition != null;
if(_trace >= 2 || (_trace >= 1 && _evictorList.size() % 50 == 0))
{
@@ -1579,6 +1585,7 @@ class EvictorI extends Ice.LocalObjectImpl implements Evictor, Runnable
element.stale = true;
element.store.cache().unpin(element.identity);
p.remove();
+ element.evictPosition = null;
_currentEvictorSize--;
}
}