diff options
author | Yang Gao <yangg@google.com> | 2017-11-20 16:06:24 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-20 16:06:24 -0800 |
commit | e295ec7cc8e6406bca5be770af75b15af218bd03 (patch) | |
tree | 9466f6e6175a1b31a08b8fc02143561d910e5b3a /src/core/lib/iomgr/ev_epoll1_linux.cc | |
parent | 61ea3e22a165fc7edda490ea38b2e97c0dd3e4c0 (diff) | |
parent | ed49fe5510780a96bf128bc6397f0d7d5394f669 (diff) |
Merge pull request #13454 from yang-g/lockfree_event
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 60446f7dd5..0dda1d924c 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->InitEvent(); + new_fd->write_closure->InitEvent(); 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->DestroyEvent(); + fd->write_closure->DestroyEvent(); gpr_mu_lock(&fd_freelist_mu); fd->freelist_next = fd_freelist; |