Avoid generating more than one engine.timer message per second when usleep is interrupted by signals.

git-svn-id: http://yate.null.ro/svn/yate/trunk@6361 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
oana 2019-10-25 14:26:49 +00:00
parent caf2ae7042
commit fa4721bea7
1 changed files with 7 additions and 2 deletions

View File

@ -1749,11 +1749,16 @@ int Engine::run()
}
// Attempt to sleep until the next full second
long t = 1000000 - (long)(Time::now() % 1000000) - corr;
u_int64_t tstart = Time::now();
long t = 1000000 - (long)(tstart % 1000000) - corr;
if (t < 250000)
t += 1000000;
XDebug(DebugAll,"Sleeping for %ld",t);
Thread::usleep(t);
long diff = 0;
while (t > diff) {
Thread::usleep(t - diff);
diff = Time::now() - tstart;
}
Message* m = new Message("engine.timer",0,true);
m->addParam("time",String(m->msgTime().sec()));
if (nodeName())