aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/surface
diff options
context:
space:
mode:
authorGravatar David G. Quintas <dgq@google.com>2015-07-17 14:19:55 -0700
committerGravatar David G. Quintas <dgq@google.com>2015-07-17 14:19:55 -0700
commitfea28b79fb0a211b2ea8515dab25db19099ea595 (patch)
tree217bdcf86663d73db32e57f45c4a0eed117d53a0 /src/core/surface
parent068e320ed17d2eb3c2ccd82ee3bc5e8b7b783544 (diff)
parent304048c271a3d4b913ac1945f5b83a3a6f0b9a35 (diff)
Merge pull request #2485 from ctiller/thread-stress=craig-stress
Fix leaked completions (leading to leaked calls in thread_stress_test)
Diffstat (limited to 'src/core/surface')
-rw-r--r--src/core/surface/completion_queue.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/surface/completion_queue.c b/src/core/surface/completion_queue.c
index c67f75fc5c..f3630b31dd 100644
--- a/src/core/surface/completion_queue.c
+++ b/src/core/surface/completion_queue.c
@@ -116,7 +116,7 @@ void grpc_cq_begin_op(grpc_completion_queue *cc) {
void grpc_cq_end_op(grpc_completion_queue *cc, void *tag, int success,
void (*done)(void *done_arg, grpc_cq_completion *storage),
void *done_arg, grpc_cq_completion *storage) {
- int shutdown = gpr_unref(&cc->pending_events);
+ int shutdown;
storage->tag = tag;
storage->done = done;
@@ -124,15 +124,15 @@ void grpc_cq_end_op(grpc_completion_queue *cc, void *tag, int success,
storage->next =
((gpr_uintptr)&cc->completed_head) | ((gpr_uintptr)(success != 0));
+ gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
+ shutdown = gpr_unref(&cc->pending_events);
if (!shutdown) {
- gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
cc->completed_tail->next =
((gpr_uintptr)storage) | (1u & (gpr_uintptr)cc->completed_tail->next);
cc->completed_tail = storage;
grpc_pollset_kick(&cc->pollset);
gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset));
} else {
- gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
cc->completed_tail->next =
((gpr_uintptr)storage) | (1u & (gpr_uintptr)cc->completed_tail->next);
cc->completed_tail = storage;