aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/iomgr/fd_posix.c
diff options
context:
space:
mode:
authorGravatar David Garcia Quintas <dgq@google.com>2015-05-28 16:06:48 -0700
committerGravatar David Garcia Quintas <dgq@google.com>2015-05-31 12:48:44 -0700
commit2738ae8c44786b8798d4b111e289b4baf1a134c6 (patch)
treec5f45f718ae4c0b530f8f1ce49051bd4bd16a38c /src/core/iomgr/fd_posix.c
parenta25e6de0ca8740ef59709db52bcaba72e6ccaf83 (diff)
fd_posix: free from managed closures!
Diffstat (limited to 'src/core/iomgr/fd_posix.c')
-rw-r--r--src/core/iomgr/fd_posix.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/core/iomgr/fd_posix.c b/src/core/iomgr/fd_posix.c
index 379ca66c85..33d90872c3 100644
--- a/src/core/iomgr/fd_posix.c
+++ b/src/core/iomgr/fd_posix.c
@@ -249,7 +249,7 @@ static void notify_on(grpc_fd *fd, gpr_atm *st, grpc_iomgr_closure *closure,
abort();
}
-static void set_ready_locked(gpr_atm *st, grpc_iomgr_closure *callbacks,
+static void set_ready_locked(gpr_atm *st, grpc_iomgr_closure **callbacks,
size_t *ncallbacks) {
gpr_intptr state = gpr_atm_acq_load(st);
@@ -269,7 +269,7 @@ static void set_ready_locked(gpr_atm *st, grpc_iomgr_closure *callbacks,
default: /* waiting */
GPR_ASSERT(gpr_atm_no_barrier_load(st) != READY &&
gpr_atm_no_barrier_load(st) != NOT_READY);
- callbacks[(*ncallbacks)++] = *(grpc_iomgr_closure *)state;
+ callbacks[(*ncallbacks)++] = (grpc_iomgr_closure *)state;
gpr_atm_rel_store(st, NOT_READY);
return;
}
@@ -280,7 +280,7 @@ static void set_ready(grpc_fd *fd, gpr_atm *st,
/* only one set_ready can be active at once (but there may be a racing
notify_on) */
int success;
- grpc_iomgr_closure closure;
+ grpc_iomgr_closure* closure;
size_t ncb = 0;
gpr_mu_lock(&fd->set_state_mu);
@@ -289,9 +289,7 @@ static void set_ready(grpc_fd *fd, gpr_atm *st,
success = !gpr_atm_acq_load(&fd->shutdown);
GPR_ASSERT(ncb <= 1);
if (ncb > 0) {
- grpc_iomgr_closure *managed_cb = gpr_malloc(sizeof(grpc_iomgr_closure));
- grpc_iomgr_managed_closure_init(managed_cb, closure.cb, closure.cb_arg);
- process_callbacks(managed_cb, ncb, success, allow_synchronous_callback);
+ process_callbacks(closure, ncb, success, allow_synchronous_callback);
}
}
@@ -300,11 +298,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_closures, &ncb);
- set_ready_locked(&fd->writest, fd->shutdown_closures, &ncb);
+ set_ready_locked(&fd->readst, &fd->shutdown_closures[0], &ncb);
+ set_ready_locked(&fd->writest, &fd->shutdown_closures[0], &ncb);
gpr_mu_unlock(&fd->set_state_mu);
GPR_ASSERT(ncb <= 2);
- process_callbacks(fd->shutdown_closures, ncb, 0, 0);
+ process_callbacks(fd->shutdown_closures[0], ncb, 0, 0);
}
void grpc_fd_notify_on_read(grpc_fd *fd, grpc_iomgr_closure *closure) {