diff options
-rw-r--r-- | cpp/src/Freeze/EvictorI.cpp | 7 | ||||
-rw-r--r-- | java/src/Freeze/EvictorI.java | 9 |
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--; } } |