diff --git a/lib/base/application.cpp b/lib/base/application.cpp index dcc4e5a70..e34f2fcb5 100644 --- a/lib/base/application.cpp +++ b/lib/base/application.cpp @@ -458,6 +458,16 @@ void Application::UpdatePidFile(const String& filename) if (m_PidFile == NULL) BOOST_THROW_EXCEPTION(runtime_error("Could not open PID file '" + filename + "'")); +#ifdef F_GETFL + int flags; + flags = fcntl(fd, F_GETFL, 0); + if (flags < 0) + BOOST_THROW_EXCEPTION(PosixException("fcntl failed", errno)); + + if (fcntl(fd, F_SETFL, flags | FD_CLOEXEC) < 0) + BOOST_THROW_EXCEPTION(PosixException("fcntl failed", errno)); +#endif /* FD_CLOEXEC */ + #ifndef _WIN32 if (flock(fileno(m_PidFile), LOCK_EX | LOCK_NB) < 0) { ClosePidFile(); @@ -576,4 +586,3 @@ void Application::SetPkgDataDir(const String& path) { m_PkgDataDir = path; } -