Truncate the PID file before writing the new PID.

This commit is contained in:
Gunnar Beutner 2013-03-12 14:06:59 +01:00
parent fc337a51e7
commit 9ea0cb4353
1 changed files with 9 additions and 1 deletions

View 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());