mirror of https://github.com/Icinga/icinga2.git
Bugfix: Don't leak lock file's fd into child processes.
This commit is contained in:
parent
601c7d25d1
commit
513b3d6820
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue