aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/iomgr/ev_epoll1_linux.cc
diff options
context:
space:
mode:
authorGravatar yang-g <yangg@google.com>2017-11-17 17:15:37 -0800
committerGravatar yang-g <yangg@google.com>2017-11-17 17:15:37 -0800
commit26521b38d235c9587ed391e285a3f5d34979df75 (patch)
treef764593dc18075eb3f05fd76c810898d9136fbe7 /src/core/lib/iomgr/ev_epoll1_linux.cc
parent90c8cf6acc698ddef1d2da3b205ad8d0014b52fa (diff)
Avoid calling dtor on grpc_fd before putting it in freelist
Diffstat (limited to 'src/core/lib/iomgr/ev_epoll1_linux.cc')
-rw-r--r--src/core/lib/iomgr/ev_epoll1_linux.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/core/lib/iomgr/ev_epoll1_linux.cc b/src/core/lib/iomgr/ev_epoll1_linux.cc
index 918bc6f933..dddd52c49f 100644
--- a/src/core/lib/iomgr/ev_epoll1_linux.cc
+++ b/src/core/lib/iomgr/ev_epoll1_linux.cc
@@ -263,11 +263,13 @@ static grpc_fd* fd_create(int fd, const char* name) {
if (new_fd == nullptr) {
new_fd = (grpc_fd*)gpr_malloc(sizeof(grpc_fd));
+ new_fd->read_closure.Init();
+ new_fd->write_closure.Init();
}
new_fd->fd = fd;
- new_fd->read_closure.Init();
- new_fd->write_closure.Init();
+ new_fd->read_closure->Init();
+ new_fd->write_closure->Init();
gpr_atm_no_barrier_store(&new_fd->read_notifier_pollset, (gpr_atm)NULL);
new_fd->freelist_next = nullptr;
@@ -336,8 +338,8 @@ static void fd_orphan(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
GRPC_CLOSURE_SCHED(exec_ctx, on_done, GRPC_ERROR_REF(error));
grpc_iomgr_unregister_object(&fd->iomgr_object);
- fd->read_closure.Destroy();
- fd->write_closure.Destroy();
+ fd->read_closure->Destroy();
+ fd->write_closure->Destroy();
gpr_mu_lock(&fd_freelist_mu);
fd->freelist_next = fd_freelist;