aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-05-01 14:36:52 -0700
committerGravatar Craig Tiller <ctiller@google.com>2017-05-01 14:36:52 -0700
commitb79e809918aeea3f5a64aea6b870bec57128bd6f (patch)
tree133f28ae21a751840d01897102fc3c9b84264b6d /src/core
parentb86da9503ab152e6883c363a627333e16b80eb51 (diff)
parent305dcf3d32bed0614325ead76f121702768ce874 (diff)
Merge github.com:grpc/grpc into serve_fries
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ext/filters/http/message_compress/message_compress_filter.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/core/ext/filters/http/message_compress/message_compress_filter.c b/src/core/ext/filters/http/message_compress/message_compress_filter.c
index 4f5f41e9b0..1da8cf69cb 100644
--- a/src/core/ext/filters/http/message_compress/message_compress_filter.c
+++ b/src/core/ext/filters/http/message_compress/message_compress_filter.c
@@ -277,13 +277,10 @@ static void compress_start_transport_stream_op_batch(
GPR_TIMER_BEGIN("compress_start_transport_stream_op_batch", 0);
if (op->cancel_stream) {
- gpr_atm cur;
GRPC_ERROR_REF(op->payload->cancel_stream.cancel_error);
- do {
- cur = gpr_atm_acq_load(&calld->send_initial_metadata_state);
- } while (!gpr_atm_rel_cas(
- &calld->send_initial_metadata_state, cur,
- CANCELLED_BIT | (gpr_atm)op->payload->cancel_stream.cancel_error));
+ gpr_atm cur = gpr_atm_full_xchg(
+ &calld->send_initial_metadata_state,
+ CANCELLED_BIT | (gpr_atm)op->payload->cancel_stream.cancel_error);
switch (cur) {
case HAS_COMPRESSION_ALGORITHM:
case NO_COMPRESSION_ALGORITHM:
@@ -311,13 +308,18 @@ static void compress_start_transport_stream_op_batch(
grpc_transport_stream_op_batch_finish_with_failure(exec_ctx, op, error);
return;
}
- gpr_atm cur = gpr_atm_acq_load(&calld->send_initial_metadata_state);
+ gpr_atm cur;
+ retry_send_im:
+ cur = gpr_atm_acq_load(&calld->send_initial_metadata_state);
GPR_ASSERT(cur != HAS_COMPRESSION_ALGORITHM &&
cur != NO_COMPRESSION_ALGORITHM);
if ((cur & CANCELLED_BIT) == 0) {
- gpr_atm_rel_store(&calld->send_initial_metadata_state,
- has_compression_algorithm ? HAS_COMPRESSION_ALGORITHM
- : NO_COMPRESSION_ALGORITHM);
+ if (!gpr_atm_rel_cas(&calld->send_initial_metadata_state, cur,
+ has_compression_algorithm
+ ? HAS_COMPRESSION_ALGORITHM
+ : NO_COMPRESSION_ALGORITHM)) {
+ goto retry_send_im;
+ }
if (cur != INITIAL_METADATA_UNSEEN) {
grpc_call_next_op(exec_ctx, elem,
(grpc_transport_stream_op_batch *)cur);