summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/LocHeap.cpp4
-rw-r--r--utils/LocTimer.cpp8
2 files changed, 8 insertions, 4 deletions
diff --git a/utils/LocHeap.cpp b/utils/LocHeap.cpp
index 4126878..d667f14 100644
--- a/utils/LocHeap.cpp
+++ b/utils/LocHeap.cpp
@@ -199,7 +199,7 @@ bool LocHeapNode::checkNodes() {
int totalSize = mSize;
if (mLeft) {
// check the consistency of left subtree
- if (!outRanks(*mLeft) || !mLeft->checkNodes()) {
+ if (mLeft->outRanks(*this) || !mLeft->checkNodes()) {
return false;
}
// subtract the size of left subtree (with subtree head)
@@ -208,7 +208,7 @@ bool LocHeapNode::checkNodes() {
if (mRight) {
// check the consistency of right subtree
- if (!outRanks(*mRight) || !mRight->checkNodes()) {
+ if (mRight->outRanks(*this) || !mRight->checkNodes()) {
return false;
}
// subtract the size of right subtree (with subtree head)
diff --git a/utils/LocTimer.cpp b/utils/LocTimer.cpp
index 2d972c4..1699359 100644
--- a/utils/LocTimer.cpp
+++ b/utils/LocTimer.cpp
@@ -342,8 +342,12 @@ void LocTimerContainer::remove(LocTimerDelegate& timer) {
LocMsg(), mTimerContainer(&container), mTimer(&timer) {}
inline virtual void proc() const {
LocTimerDelegate* priorTop = mTimerContainer->getSoonestTimer();
- if (NULL != ((LocHeap*)mTimerContainer)->remove((LocRankable&)*mTimer)) {
- mTimerContainer->updateSoonestTime(priorTop);
+ // update soonest timer only if mTimer is actually removed from mTimerContainer
+ // AND mTimer is not priorTop.
+ if (priorTop == ((LocHeap*)mTimerContainer)->remove((LocRankable&)*mTimer)) {
+ // if passing in NULL, we tell updateSoonestTime to update kernel with
+ // the current top timer interval.
+ mTimerContainer->updateSoonestTime(NULL);
}
delete mTimer;
}