Merge pull request #7000 from Icinga/bugfix/goto-loop

Don't abuse goto for building simple loops
This commit is contained in:
Michael Friedrich 2019-04-03 09:46:17 +02:00 committed by GitHub
commit c2f180395a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 52 deletions

View File

@ -300,8 +300,20 @@ void Application::RunEventLoop()
double lastLoop = Utility::GetTime(); double lastLoop = Utility::GetTime();
mainloop: while (!m_ShuttingDown) {
while (!m_ShuttingDown && !m_RequestRestart) { if (m_RequestRestart) {
m_RequestRestart = false; // we are now handling the request, once is enough
#ifdef HAVE_SYSTEMD
sd_notify(0, "RELOADING=1");
#endif /* HAVE_SYSTEMD */
// 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. */ /* Watches for changes to the system time. Adjusts timers if necessary. */
Utility::Sleep(2.5); Utility::Sleep(2.5);
@ -330,22 +342,6 @@ mainloop:
lastLoop = now; lastLoop = now;
} }
if (m_RequestRestart) {
m_RequestRestart = false; // we are now handling the request, once is enough
#ifdef HAVE_SYSTEMD
sd_notify(0, "RELOADING=1");
#endif /* HAVE_SYSTEMD */
// are we already restarting? ignore request if we already are
if (l_Restarting)
goto mainloop;
l_Restarting = true;
m_ReloadProcess = StartReloadProcess();
goto mainloop;
} }
#ifdef HAVE_SYSTEMD #ifdef HAVE_SYSTEMD

View File

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