]> granicus.if.org Git - icinga2/commitdiff
Truncate the PID file before writing the new PID.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 12 Mar 2013 13:06:59 +0000 (14:06 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 12 Mar 2013 13:06:59 +0000 (14:06 +0100)
lib/base/application.cpp

index 2ee689ec624efbb48b776ed334fd8922325b9935..cfbc226ab7b22e009d3ad596c7c9307c4084f12b 100644 (file)
@@ -462,9 +462,15 @@ void Application::UpdatePidFile(const String& filename)
        if (m_PidFile != NULL)
                fclose(m_PidFile);
 
+#ifndef _WIN32
+       char *mode = "r+";
+#else /* _WIN32 */
+       char *mode = "w";
+#endif /* _WIN32 */
+
        /* There's just no sane way of getting a file descriptor for a
         * C++ ofstream which is why we're using FILEs here. */
-       m_PidFile = fopen(filename.CStr(), "r+");
+       m_PidFile = fopen(filename.CStr(), mode);
 
        if (m_PidFile == NULL)
                BOOST_THROW_EXCEPTION(runtime_error("Could not open PID file '" + filename + "'"));
@@ -479,6 +485,8 @@ void Application::UpdatePidFile(const String& filename)
 
                _exit(EXIT_FAILURE);
        }
+
+       (void) ftruncate(fd, 0);
 #endif /* _WIN32 */
 
        fprintf(m_PidFile, "%d", Utility::GetPid());