diff --git a/src/core/iomgr/fd_posix.c b/src/core/iomgr/fd_posix.c index 6dcf1a3ec00c8b3a52c237b393eebe243ff41d10..379ca66c85cf879a1eca46911731a03fecabd989 100644 --- a/src/core/iomgr/fd_posix.c +++ b/src/core/iomgr/fd_posix.c @@ -117,10 +117,7 @@ static void ref_by(grpc_fd *fd, int n) { static void unref_by(grpc_fd *fd, int n) { gpr_atm old = gpr_atm_full_fetch_add(&fd->refst, -n); if (old == n) { - close(fd->fd); - grpc_iomgr_closure_init(&fd->on_done_iocb, fd->on_done, - fd->on_done_user_data); - grpc_iomgr_add_callback(&fd->on_done_iocb); + grpc_iomgr_add_callback(&fd->on_done_closure); freelist_fd(fd); grpc_iomgr_unref(); } else { @@ -183,8 +180,8 @@ static void wake_all_watchers_locked(grpc_fd *fd) { } void grpc_fd_orphan(grpc_fd *fd, grpc_iomgr_cb_func on_done, void *user_data) { - fd->on_done = on_done ? on_done : do_nothing; - fd->on_done_user_data = user_data; + grpc_iomgr_closure_init(&fd->on_done_closure, on_done ? on_done : do_nothing, + user_data); shutdown(fd->fd, SHUT_RDWR); ref_by(fd, 1); /* remove active status, but keep referenced */ gpr_mu_lock(&fd->watcher_mu); @@ -303,11 +300,11 @@ void grpc_fd_shutdown(grpc_fd *fd) { gpr_mu_lock(&fd->set_state_mu); GPR_ASSERT(!gpr_atm_no_barrier_load(&fd->shutdown)); gpr_atm_rel_store(&fd->shutdown, 1); - set_ready_locked(&fd->readst, fd->shutdown_iocbs, &ncb); - set_ready_locked(&fd->writest, fd->shutdown_iocbs, &ncb); + set_ready_locked(&fd->readst, fd->shutdown_closures, &ncb); + set_ready_locked(&fd->writest, fd->shutdown_closures, &ncb); gpr_mu_unlock(&fd->set_state_mu); GPR_ASSERT(ncb <= 2); - process_callbacks(fd->shutdown_iocbs, ncb, 0, 0); + process_callbacks(fd->shutdown_closures, ncb, 0, 0); } void grpc_fd_notify_on_read(grpc_fd *fd, grpc_iomgr_closure *closure) { diff --git a/src/core/iomgr/fd_posix.h b/src/core/iomgr/fd_posix.h index 2d9c3245e346e0b5d58ed53d35fed2e461800fc6..db9b2a74f62bf5402828763ce26458c77d825b18 100644 --- a/src/core/iomgr/fd_posix.h +++ b/src/core/iomgr/fd_posix.h @@ -91,12 +91,10 @@ struct grpc_fd { gpr_atm readst; gpr_atm writest; - grpc_iomgr_cb_func on_done; - void *on_done_user_data; struct grpc_fd *freelist_next; - grpc_iomgr_closure on_done_iocb; - grpc_iomgr_closure shutdown_iocbs[2]; + grpc_iomgr_closure on_done_closure; + grpc_iomgr_closure shutdown_closures[2]; }; /* Create a wrapped file descriptor.