From 08f931541c5d2cf65f05c61aebd7b8dbe4bdf7a3 Mon Sep 17 00:00:00 2001 From: Li Zhang Date: Fri, 9 May 2014 11:28:31 +0800 Subject: [PATCH] Set FD_CLOEXEC to release FD on exec Change-Id: I97de0604df81736db5caa3eb53e6c5625d6c4193 --- ism/modules/frontend/scim_socket_frontend.cpp | 2 -- ism/src/scim_socket.cpp | 7 ++++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ism/modules/frontend/scim_socket_frontend.cpp b/ism/modules/frontend/scim_socket_frontend.cpp index 4f1640f..b7148aa 100644 --- a/ism/modules/frontend/scim_socket_frontend.cpp +++ b/ism/modules/frontend/scim_socket_frontend.cpp @@ -287,8 +287,6 @@ void SocketFrontEnd::run_helper (const Socket &client) if (pid < 0) return; if (pid == 0) { - if (m_socket_server.is_running ()) - m_socket_server.shutdown (); const char *argv [] = { SCIM_HELPER_LAUNCHER_PROGRAM, "--daemon", diff --git a/ism/src/scim_socket.cpp b/ism/src/scim_socket.cpp index 8ec97b3..0bdfff3 100644 --- a/ism/src/scim_socket.cpp +++ b/ism/src/scim_socket.cpp @@ -632,7 +632,10 @@ public: if (ret < 0 && addrlen > 0) m_err = errno; - + else { + int flag = fcntl (ret, F_GETFD, 0); + fcntl (ret, F_SETFD, flag|FD_CLOEXEC); + } SCIM_DEBUG_SOCKET(1) << "Socket: Accept connection, ret: " << ret << "\n"; return ret; @@ -657,6 +660,8 @@ public: m_err = 0; m_family = family; m_id = ret; + int flag = fcntl (ret, F_GETFD, 0); + fcntl (ret, F_SETFD, flag|FD_CLOEXEC); } else { m_err = errno; } -- 2.7.4