From d076bb0a93eacd719f838f10165f500dfc21f790 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 13 Feb 2013 12:34:25 +0100 Subject: [PATCH] Fixed another file descriptor leak. --- lib/base/process-unix.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/base/process-unix.cpp b/lib/base/process-unix.cpp index f2ad37914..b74c1b79f 100644 --- a/lib/base/process-unix.cpp +++ b/lib/base/process-unix.cpp @@ -35,6 +35,14 @@ void Process::CreateWorkers(void) m_TaskFd = fds[1]; + int flags; + flags = fcntl(fds[1], F_GETFL, 0); + if (flags < 0) + BOOST_THROW_EXCEPTION(PosixException("fcntl failed", errno)); + + if (fcntl(fds[1], F_SETFL, flags | O_NONBLOCK | O_CLOEXEC) < 0) + BOOST_THROW_EXCEPTION(PosixException("fcntl failed", errno)); + for (int i = 0; i < thread::hardware_concurrency(); i++) { int childTaskFd; @@ -54,6 +62,8 @@ void Process::CreateWorkers(void) thread t(&Process::WorkerThreadProc, childTaskFd); t.detach(); } + + (void) close(fds[0]); } void Process::WorkerThreadProc(int taskFd)