From 747a04ac501f859acb1f1cc5f3eb2e76c8c1f96a Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Thu, 12 Apr 2018 10:56:17 +0200 Subject: [PATCH] pathut pid file: make sure we dont close the same fd twice. Might fix the mysterious "error 9 on netlink descriptor" crash? --- src/utils/pathut.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/utils/pathut.cpp b/src/utils/pathut.cpp index 6c12920c..6b358b7b 100644 --- a/src/utils/pathut.cpp +++ b/src/utils/pathut.cpp @@ -813,10 +813,7 @@ out: // alone. Pidfile::~Pidfile() { - if (m_fd >= 0) { - ::close(m_fd); - } - m_fd = -1; + this->close(); } pid_t Pidfile::read_pid() @@ -857,7 +854,7 @@ int Pidfile::flopen() lockdata.l_whence = SEEK_SET; if (fcntl(m_fd, F_SETLK, &lockdata) != 0) { int serrno = errno; - (void)::close(m_fd); + this->close() errno = serrno; m_reason = "fcntl lock failed"; return -1; @@ -869,7 +866,7 @@ int Pidfile::flopen() int operation = LOCK_EX | LOCK_NB; if (flock(m_fd, operation) == -1) { int serrno = errno; - (void)::close(m_fd); + this->close(); errno = serrno; m_reason = "flock failed"; return -1; @@ -880,7 +877,7 @@ int Pidfile::flopen() if (ftruncate(m_fd, 0) != 0) { /* can't happen [tm] */ int serrno = errno; - (void)::close(m_fd); + this->close(); errno = serrno; m_reason = "ftruncate failed"; return -1; @@ -915,7 +912,12 @@ int Pidfile::write_pid() int Pidfile::close() { - return ::close(m_fd); + int ret = -1; + if (m_fd >= 0) { + ret = ::close(m_fd); + m_fd = -1; + } + return ret; } int Pidfile::remove()