Commit 8c3d70e2 authored by unknown's avatar unknown

ndb -

Fix bug in bug fix in FastScheduler
  remove possibility of endless loop
  resulting in APZJobBuffer overflow due to statistics reporting


ndb/src/kernel/vm/FastScheduler.cpp:
  Fix bug in bug fix in FastScheduler
    remove possibility of endless loop
    resulting in APZJobBuffer overflow due to statistics reporting
parent 30e89d0a
......@@ -85,7 +85,7 @@ FastScheduler::activateSendPacked()
void
FastScheduler::doJob()
{
Uint32 init_loopCount = 0;
Uint32 loopCount = 0;
Uint32 TminLoops = getBOccupancy() + EXTRA_SIGNALS_PER_DO_JOB;
Uint32 TloopMax = (Uint32)globalData.loopMax;
if (TminLoops < TloopMax) {
......@@ -94,10 +94,9 @@ FastScheduler::doJob()
if (TloopMax < MIN_NUMBER_OF_SIG_PER_DO_JOB) {
TloopMax = MIN_NUMBER_OF_SIG_PER_DO_JOB;
}//if
register Signal* signal = getVMSignals();
register Uint32 tHighPrio= globalData.highestAvailablePrio;
do{
Uint32 loopCount = init_loopCount;
register Uint32 tHighPrio = globalData.highestAvailablePrio;
register Signal* signal = getVMSignals();
while ((tHighPrio < LEVEL_IDLE) && (loopCount < TloopMax)) {
// signal->garbage_register();
// To ensure we find bugs quickly
......@@ -155,24 +154,27 @@ FastScheduler::doJob()
}//if
loopCount++;
}//while
if (globalData.sendPackedActivated == 1) {
Uint32 t1 = theDoJobTotalCounter;
Uint32 t2 = theDoJobCallCounter;
t1 += (loopCount - init_loopCount);
t2++;
theDoJobTotalCounter = t1;
theDoJobCallCounter = t2;
if (t2 == 8192) {
reportDoJobStatistics(t1 >> 13);
theDoJobCallCounter = 0;
theDoJobTotalCounter = 0;
}//if
}//if
init_loopCount = loopCount;
sendPacked();
tHighPrio = globalData.highestAvailablePrio;
if(getBOccupancy() > MAX_OCCUPANCY)
{
if(loopCount != TloopMax)
abort();
assert( loopCount == TloopMax );
TloopMax += 512;
}
} while ((getBOccupancy() > MAX_OCCUPANCY) ||
((init_loopCount < TloopMax) &&
(globalData.highestAvailablePrio < LEVEL_IDLE)));
((loopCount < TloopMax) &&
(tHighPrio < LEVEL_IDLE)));
theDoJobCallCounter ++;
theDoJobTotalCounter += loopCount;
if (theDoJobCallCounter == 8192) {
reportDoJobStatistics(theDoJobTotalCounter >> 13);
theDoJobCallCounter = 0;
theDoJobTotalCounter = 0;
}//if
}//FastScheduler::doJob()
void FastScheduler::sendPacked()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment