summaryrefslogtreecommitdiff
path: root/ndb/src/kernel/vm/FastScheduler.cpp
diff options
context:
space:
mode:
authorunknown <joreland@mysql.com>2005-02-09 15:46:12 +0100
committerunknown <joreland@mysql.com>2005-02-09 15:46:12 +0100
commit7b6ede6b032bea5d86319eb07a9157dfeb8b5de8 (patch)
treea778220543d815b71948697ec3c3e31c69eb9ed1 /ndb/src/kernel/vm/FastScheduler.cpp
parenta372d57f5556412ca3c31f85abe07f948bc1730c (diff)
downloadmariadb-git-7b6ede6b032bea5d86319eb07a9157dfeb8b5de8.tar.gz
recommit fix as 4.1->5.0 is currently impossible and fix is _really_ useful
Diffstat (limited to 'ndb/src/kernel/vm/FastScheduler.cpp')
-rw-r--r--ndb/src/kernel/vm/FastScheduler.cpp42
1 files changed, 22 insertions, 20 deletions
diff --git a/ndb/src/kernel/vm/FastScheduler.cpp b/ndb/src/kernel/vm/FastScheduler.cpp
index a883882e452..a2d806571fe 100644
--- a/ndb/src/kernel/vm/FastScheduler.cpp
+++ b/ndb/src/kernel/vm/FastScheduler.cpp
@@ -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()