Sophie

Sophie

distrib > Fedora > 17 > x86_64 > media > updates-src > by-pkgid > 45ece6a6d17fe5fd6400be6d70c4ad6a > files > 5

ctdb-1.2.39-2.fc17.src.rpm

From 1662f098e82b9a78a215eb55bf3b437be98b6f6d Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose@redhat.com>
Date: Wed, 1 Feb 2012 12:24:02 +0100
Subject: [PATCH] Set FD_CLOEXEC for epoll file descriptors

---
 lib/tevent/tevent_standard.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/lib/tevent/tevent_standard.c b/lib/tevent/tevent_standard.c
index 05d734a..bb343fc 100644
--- a/lib/tevent/tevent_standard.c
+++ b/lib/tevent/tevent_standard.c
@@ -99,7 +99,14 @@ static int epoll_ctx_destructor(struct std_event_context *std_ev)
 */
 static void epoll_init_ctx(struct std_event_context *std_ev)
 {
+	unsigned v;
+
 	std_ev->epoll_fd = epoll_create(64);
+
+	/* on exec, don't inherit the fd */
+	v = fcntl(std_ev->epoll_fd, F_GETFD, 0);
+        fcntl(std_ev->epoll_fd, F_SETFD, v | FD_CLOEXEC);
+
 	std_ev->pid = getpid();
 	talloc_set_destructor(std_ev, epoll_ctx_destructor);
 }
@@ -114,6 +121,7 @@ static void epoll_add_event(struct std_event_context *std_ev, struct tevent_fd *
 static void epoll_check_reopen(struct std_event_context *std_ev)
 {
 	struct tevent_fd *fde;
+	unsigned v;
 
 	if (std_ev->pid == getpid()) {
 		return;
@@ -126,6 +134,11 @@ static void epoll_check_reopen(struct std_event_context *std_ev)
 			     "Failed to recreate epoll handle after fork\n");
 		return;
 	}
+
+	/* on exec, don't inherit the fd */
+	v = fcntl(std_ev->epoll_fd, F_GETFD, 0);
+        fcntl(std_ev->epoll_fd, F_SETFD, v | FD_CLOEXEC);
+
 	std_ev->pid = getpid();
 	for (fde=std_ev->ev->fd_events;fde;fde=fde->next) {
 		epoll_add_event(std_ev, fde);
-- 
1.7.7.6