Don't abuse goto for building simple loops

This commit is contained in:
Alexander A. Klimov 2019-03-08 14:59:01 +01:00
parent 4339240b46
commit ac354f9e80
2 changed files with 45 additions and 52 deletions

View File

@ -309,52 +309,48 @@ void Application::RunEventLoop()
double lastLoop = Utility::GetTime();
mainloop:
while (!m_ShuttingDown && !m_RequestRestart) {
/* Watches for changes to the system time. Adjusts timers if necessary. */
Utility::Sleep(2.5);
if (m_RequestReopenLogs) {
Log(LogNotice, "Application", "Reopening log files");
m_RequestReopenLogs = false;
OnReopenLogs();
}
double now = Utility::GetTime();
double timeDiff = lastLoop - now;
while (!m_ShuttingDown) {
if (m_RequestRestart) {
m_RequestRestart = false; // we are now handling the request, once is enough
#ifdef HAVE_SYSTEMD
sd_notify(0, "WATCHDOG=1");
sd_notify(0, "RELOADING=1");
#endif /* HAVE_SYSTEMD */
if (std::fabs(timeDiff) > 15) {
/* We made a significant jump in time. */
Log(LogInformation, "Application")
<< "We jumped "
<< (timeDiff < 0 ? "forward" : "backward")
<< " in time: " << std::fabs(timeDiff) << " seconds";
// are we already restarting? ignore request if we already are
if (!l_Restarting) {
l_Restarting = true;
m_ReloadProcess = StartReloadProcess();
}
} else {
/* Watches for changes to the system time. Adjusts timers if necessary. */
Utility::Sleep(2.5);
Timer::AdjustTimers(-timeDiff);
}
if (m_RequestReopenLogs) {
Log(LogNotice, "Application", "Reopening log files");
m_RequestReopenLogs = false;
OnReopenLogs();
}
lastLoop = now;
}
if (m_RequestRestart) {
m_RequestRestart = false; // we are now handling the request, once is enough
double now = Utility::GetTime();
double timeDiff = lastLoop - now;
#ifdef HAVE_SYSTEMD
sd_notify(0, "RELOADING=1");
sd_notify(0, "WATCHDOG=1");
#endif /* HAVE_SYSTEMD */
// are we already restarting? ignore request if we already are
if (l_Restarting)
goto mainloop;
if (std::fabs(timeDiff) > 15) {
/* We made a significant jump in time. */
Log(LogInformation, "Application")
<< "We jumped "
<< (timeDiff < 0 ? "forward" : "backward")
<< " in time: " << std::fabs(timeDiff) << " seconds";
l_Restarting = true;
m_ReloadProcess = StartReloadProcess();
Timer::AdjustTimers(-timeDiff);
}
goto mainloop;
lastLoop = now;
}
}
#ifdef HAVE_SYSTEMD

View File

@ -413,12 +413,11 @@ static pid_t ProcessSpawn(const std::vector<String>& arguments, const Dictionary
msg.msg_controllen = cmsg->cmsg_len;
send_message:
while (sendmsg(l_ProcessControlFD, &msg, 0) < 0)
StartSpawnProcessHelper();
if (send(l_ProcessControlFD, jrequest.CStr(), jrequest.GetLength(), 0) < 0)
goto send_message;
do {
while (sendmsg(l_ProcessControlFD, &msg, 0) < 0) {
StartSpawnProcessHelper();
}
} while (send(l_ProcessControlFD, jrequest.CStr(), jrequest.GetLength(), 0) < 0);
char buf[4096];
@ -450,12 +449,11 @@ static int ProcessKill(pid_t pid, int signum)
boost::mutex::scoped_lock lock(l_ProcessControlMutex);
send_message:
while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0)
StartSpawnProcessHelper();
if (send(l_ProcessControlFD, jrequest.CStr(), jrequest.GetLength(), 0) < 0)
goto send_message;
do {
while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0) {
StartSpawnProcessHelper();
}
} while (send(l_ProcessControlFD, jrequest.CStr(), jrequest.GetLength(), 0) < 0);
char buf[4096];
@ -482,12 +480,11 @@ static int ProcessWaitPID(pid_t pid, int *status)
boost::mutex::scoped_lock lock(l_ProcessControlMutex);
send_message:
while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0)
StartSpawnProcessHelper();
if (send(l_ProcessControlFD, jrequest.CStr(), jrequest.GetLength(), 0) < 0)
goto send_message;
do {
while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0) {
StartSpawnProcessHelper();
}
} while (send(l_ProcessControlFD, jrequest.CStr(), jrequest.GetLength(), 0) < 0);
char buf[4096];