From 7cab9c7811dab92a01ef0cbd6359153d39d0cbaa Mon Sep 17 00:00:00 2001 From: yang-g Date: Wed, 1 May 2019 09:02:37 -0700 Subject: [PATCH 1/3] Remove fd from pollset when releasing the fd --- src/core/lib/iomgr/ev_epoll1_linux.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/lib/iomgr/ev_epoll1_linux.cc b/src/core/lib/iomgr/ev_epoll1_linux.cc index c2165341964..4dff4579dac 100644 --- a/src/core/lib/iomgr/ev_epoll1_linux.cc +++ b/src/core/lib/iomgr/ev_epoll1_linux.cc @@ -383,6 +383,10 @@ static void fd_shutdown_internal(grpc_fd* fd, grpc_error* why, if (fd->read_closure->SetShutdown(GRPC_ERROR_REF(why))) { if (!releasing_fd) { shutdown(fd->fd, SHUT_RDWR); + } else { + if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_DEL, fd->fd, nullptr) != 0) { + gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno)); + } } fd->write_closure->SetShutdown(GRPC_ERROR_REF(why)); fd->error_closure->SetShutdown(GRPC_ERROR_REF(why)); From 0958ed32a54cb2147c108113c9e42e4f56e6cdbb Mon Sep 17 00:00:00 2001 From: yang-g Date: Mon, 6 May 2019 16:30:15 -0700 Subject: [PATCH 2/3] Resolve review comments --- src/core/lib/iomgr/ev_epoll1_linux.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/ev_epoll1_linux.cc b/src/core/lib/iomgr/ev_epoll1_linux.cc index 4dff4579dac..35e4e119649 100644 --- a/src/core/lib/iomgr/ev_epoll1_linux.cc +++ b/src/core/lib/iomgr/ev_epoll1_linux.cc @@ -384,7 +384,11 @@ static void fd_shutdown_internal(grpc_fd* fd, grpc_error* why, if (!releasing_fd) { shutdown(fd->fd, SHUT_RDWR); } else { - if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_DEL, fd->fd, nullptr) != 0) { + /* we need a dummy event for earlier linux versions. */ + epoll_event dummy_event; + memset(&dummy_event, 0, sizeof(dummy_event)); + if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_DEL, fd->fd, &dummy_event) != + 0) { gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno)); } } From 08e251a23ad7f4b6182b405a6dde16ffa59f336f Mon Sep 17 00:00:00 2001 From: yang-g Date: Tue, 7 May 2019 14:53:17 -0700 Subject: [PATCH 3/3] resolve comments --- src/core/lib/iomgr/ev_epoll1_linux.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/lib/iomgr/ev_epoll1_linux.cc b/src/core/lib/iomgr/ev_epoll1_linux.cc index 35e4e119649..e1ab2afef15 100644 --- a/src/core/lib/iomgr/ev_epoll1_linux.cc +++ b/src/core/lib/iomgr/ev_epoll1_linux.cc @@ -386,7 +386,6 @@ static void fd_shutdown_internal(grpc_fd* fd, grpc_error* why, } else { /* we need a dummy event for earlier linux versions. */ epoll_event dummy_event; - memset(&dummy_event, 0, sizeof(dummy_event)); if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_DEL, fd->fd, &dummy_event) != 0) { gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno));