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