package com.sleepycat.je.evictor;
import com.sleepycat.je.latch.LatchSupport;
public class Evictor {
protected long hook374( INList inList, IN target, ScanIterator scanIter, boolean envIsReadOnly, long evictedBytes) throws DatabaseException {
try {
evictedBytes=original(inList,target,scanIter,envIsReadOnly,evictedBytes);
}
finally {
target.releaseLatchIfOwner();
}
return evictedBytes;
}
protected long hook375( IN child, IN parent, int index, INList inlist, ScanIterator scanIter, boolean envIsReadOnly, long evictBytes) throws DatabaseException {
try {
evictBytes=original(child,parent,index,inlist,scanIter,envIsReadOnly,evictBytes);
}
finally {
parent.releaseLatch();
}
return evictBytes;
}
protected void hook378( IN parent) throws DatabaseException {
assert parent.isLatchOwner();
original(parent);
}
protected long hook379( IN parent, int index, INList inlist, ScanIterator scanIter, boolean envIsReadOnly, long evictBytes, IN renewedChild) throws DatabaseException {
try {
evictBytes=original(parent,index,inlist,scanIter,envIsReadOnly,evictBytes,renewedChild);
}
finally {
renewedChild.releaseLatch();
}
return evictBytes;
}
@MethodObject static class Evictor_evictBatch {
long execute() throws DatabaseException {
long result=original();
assert LatchSupport.countLatchesHeld() == 0 : "latches held = " + LatchSupport.countLatchesHeld();
return result;
}
protected void hook376() throws DatabaseException {
inList.latchMajor();
original();
}
protected void hook377() throws DatabaseException {
inList.releaseMajorLatch();
original();
}
}
}