diff options
author | yang-g <yangg@google.com> | 2017-11-17 17:15:37 -0800 |
---|---|---|
committer | yang-g <yangg@google.com> | 2017-11-17 17:15:37 -0800 |
commit | 26521b38d235c9587ed391e285a3f5d34979df75 (patch) | |
tree | f764593dc18075eb3f05fd76c810898d9136fbe7 /src/core/lib/iomgr/ev_epoll1_linux.cc | |
parent | 90c8cf6acc698ddef1d2da3b205ad8d0014b52fa (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.cc | 10 |
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; |