diff options
author | 2017-09-15 15:25:50 -0700 | |
---|---|---|
committer | 2017-09-15 15:25:50 -0700 | |
commit | 49d75e3fc7022f7ff409fcb9025fe36e76d0f4ed (patch) | |
tree | 703211cd69d2d0953a87afe5d8a27154a22ba511 /src/core/lib | |
parent | 4942458b21a25ef1d9571ab25a33b4a98056699a (diff) |
Address some review comments
Diffstat (limited to 'src/core/lib')
-rw-r--r-- | src/core/lib/surface/completion_queue.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/core/lib/surface/completion_queue.c b/src/core/lib/surface/completion_queue.c index b7109c4104..1329dec35d 100644 --- a/src/core/lib/surface/completion_queue.c +++ b/src/core/lib/surface/completion_queue.c @@ -449,7 +449,7 @@ grpc_completion_queue *grpc_completion_queue_create_internal( static void cq_init_next(void *ptr) { cq_next_data *cqd = (cq_next_data *)ptr; /* Initial count is dropped by grpc_completion_queue_shutdown */ - gpr_atm_rel_store(&cqd->pending_events, 1); + gpr_atm_no_barrier_store(&cqd->pending_events, 1); cqd->shutdown_called = false; gpr_atm_no_barrier_store(&cqd->things_queued_ever, 0); cq_event_queue_init(&cqd->queue); @@ -464,7 +464,7 @@ static void cq_destroy_next(void *ptr) { static void cq_init_pluck(void *ptr) { cq_pluck_data *cqd = (cq_pluck_data *)ptr; /* Initial count is dropped by grpc_completion_queue_shutdown */ - gpr_atm_rel_store(&cqd->pending_events, 1); + gpr_atm_no_barrier_store(&cqd->pending_events, 1); cqd->completed_tail = &cqd->completed_head; cqd->completed_head.next = (uintptr_t)cqd->completed_tail; gpr_atm_no_barrier_store(&cqd->shutdown, 0); @@ -643,6 +643,11 @@ static void cq_end_op_for_next(grpc_exec_ctx *exec_ctx, /* Add the completion to the queue */ bool is_first = cq_event_queue_push(&cqd->queue, storage); gpr_atm_no_barrier_fetch_add(&cqd->things_queued_ever, 1); + + /* Since we do not hold the cq lock here, it is important to do an 'acquire' + load here (instead of a 'no_barrier' load) to match with the release store + (done via gpr_atm_full_fetch_add(pending_events, -1)) in cq_shutdown_next + */ bool will_definitely_shutdown = gpr_atm_acq_load(&cqd->pending_events) == 1; if (!will_definitely_shutdown) { |