From: Gunnar Beutner Date: Fri, 8 Feb 2013 09:23:01 +0000 (+0100) Subject: Bugfix: Don't leak lock file's fd into child processes. X-Git-Tag: v0.0.2~508 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=513b3d682057c3c13f3307a438a7ff88f6777cf7;p=icinga2 Bugfix: Don't leak lock file's fd into child processes. --- 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; } -