Commit ddd890f6 authored by mronstrom@mysql.com's avatar mronstrom@mysql.com

Merge mronstrom@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/Users/mikron/mysql-4.1
parents e70445d3 0cae5900
...@@ -76,19 +76,26 @@ FastScheduler::activateSendPacked() ...@@ -76,19 +76,26 @@ FastScheduler::activateSendPacked()
globalData.loopMax = 2048; globalData.loopMax = 2048;
}//FastScheduler::activateSendPacked() }//FastScheduler::activateSendPacked()
//------------------------------------------------------------------------
// sendPacked is executed at the end of the loop.
// To ensure that we don't send any messages before executing all local
// packed signals we do another turn in the loop (unless we have already
// executed too many signals in the loop).
//------------------------------------------------------------------------
void void
FastScheduler::doJob() FastScheduler::doJob()
{ {
Uint32 init_loopCount = 0;
Uint32 TminLoops = getBOccupancy() + EXTRA_SIGNALS_PER_DO_JOB;
Uint32 TloopMax = (Uint32)globalData.loopMax;
if (TminLoops < TloopMax) {
TloopMax = TminLoops;
}//if
if (TloopMax < MIN_NUMBER_OF_SIG_PER_DO_JOB) {
TloopMax = MIN_NUMBER_OF_SIG_PER_DO_JOB;
}//if
do{ do{
Uint32 loopCount = 0; Uint32 loopCount = init_loopCount;
Uint32 TminLoops = getBOccupancy() + EXTRA_SIGNALS_PER_DO_JOB;
Uint32 TloopMax = (Uint32)globalData.loopMax;
if (TminLoops < TloopMax) {
TloopMax = TminLoops;
}//if
if (TloopMax < MIN_NUMBER_OF_SIG_PER_DO_JOB) {
TloopMax = MIN_NUMBER_OF_SIG_PER_DO_JOB;
}//if
register Uint32 tHighPrio = globalData.highestAvailablePrio; register Uint32 tHighPrio = globalData.highestAvailablePrio;
register Signal* signal = getVMSignals(); register Signal* signal = getVMSignals();
while ((tHighPrio < LEVEL_IDLE) && (loopCount < TloopMax)) { while ((tHighPrio < LEVEL_IDLE) && (loopCount < TloopMax)) {
...@@ -151,7 +158,7 @@ FastScheduler::doJob() ...@@ -151,7 +158,7 @@ FastScheduler::doJob()
if (globalData.sendPackedActivated == 1) { if (globalData.sendPackedActivated == 1) {
Uint32 t1 = theDoJobTotalCounter; Uint32 t1 = theDoJobTotalCounter;
Uint32 t2 = theDoJobCallCounter; Uint32 t2 = theDoJobCallCounter;
t1 += loopCount; t1 += (loopCount - init_loopCount);
t2++; t2++;
theDoJobTotalCounter = t1; theDoJobTotalCounter = t1;
theDoJobCallCounter = t2; theDoJobCallCounter = t2;
...@@ -161,7 +168,11 @@ FastScheduler::doJob() ...@@ -161,7 +168,11 @@ FastScheduler::doJob()
theDoJobTotalCounter = 0; theDoJobTotalCounter = 0;
}//if }//if
}//if }//if
} while (getBOccupancy() > MAX_OCCUPANCY); init_loopCount = loopCount;
sendPacked();
} while ((getBOccupancy() > MAX_OCCUPANCY) ||
((init_loopCount < TloopMax) &&
(globalData.highestAvailablePrio < LEVEL_IDLE)));
}//FastScheduler::doJob() }//FastScheduler::doJob()
void FastScheduler::sendPacked() void FastScheduler::sendPacked()
......
...@@ -173,9 +173,6 @@ void ThreadConfig::ipControlLoop() ...@@ -173,9 +173,6 @@ void ThreadConfig::ipControlLoop()
// until all buffers are empty or until we have executed 2048 signals. // until all buffers are empty or until we have executed 2048 signals.
//-------------------------------------------------------------------- //--------------------------------------------------------------------
globalScheduler.doJob(); globalScheduler.doJob();
globalScheduler.sendPacked();
}//while }//while
globalData.incrementWatchDogCounter(6); globalData.incrementWatchDogCounter(6);
......
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