114 int RTsend, theState, Changes, myPort;
118 do {mySemaphore.Wait();
120 Changes = currState ^ prevState;
121 theState = currState;
122 prevState = currState;
126 if (Changes && (myStatus.
Hdr.
modifier = Status(Changes, theState)))
128 {myStatus.
Hdr.
streamid = htonl(myPort); RTsend = 1;}
130 RTsend = (isMan > 0 ? (theState &
SRV_Suspend) : 0);
133 RTable.Send(
"status", (
char *)&myStatus,
sizeof(myStatus));
268 {
case Active:
if ((newVal = ActivCnt ? 0 : 1) != adminSuspend)
269 {
if ( newVal && !StageCnt)
unlink(SuspendFile);
270 else if (!newVal || !StageCnt)
unlink(SuspendFile);
271 else close(
open(SuspendFile, O_WRONLY|O_CREAT,
273 adminSuspend = newVal;
277 case Counts: numStaging += StageCnt;
278 numActive += ActivCnt;
281 case FrontEnd:
if ((feOK = (ActivCnt ? 1 : 0)) && StageCnt >= 0)
285 case Space: noSpace = (ActivCnt ? 0 : 1);
288 case Stage:
if ((newVal = ActivCnt ? 0 : 1) != adminNoStage)
289 {
if (newVal)
unlink(NoStageFile);
290 else close(
open(NoStageFile, O_WRONLY|O_CREAT,
292 adminNoStage = newVal;
296 default:
Say.Emsg(
"State",
"Invalid state update");
301 DEBUG(What <<
" Parm1=" <<ActivCnt <<
" Parm2=" <<StageCnt);
302 currState=(numActive < minNodeCnt || adminSuspend ?
SRV_Suspend:0)
303 |(numStaging < 1 || noSpace || adminNoStage ?
All_NoStage:0)
311 if (currState != prevState && Enabled) mySemaphore.Post();