Properly handle cancellation during downwards propagation.

Change on 2014/12/17 by ctiller <ctiller@google.com>
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=82395253
pull/1/merge
ctiller 10 years ago committed by Michael Lumish
parent b74550655a
commit bcd6259a95
  1. 25
      src/core/channel/client_channel.c

@ -258,7 +258,6 @@ static void cancel_rpc(grpc_call_element *elem, grpc_call_op *op) {
static void call_op(grpc_call_element *elem, grpc_call_element *from_elem,
grpc_call_op *op) {
call_data *calld = elem->call_data;
grpc_call_element *child_elem;
GPR_ASSERT(elem->filter == &grpc_client_channel_filter);
GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
@ -277,19 +276,21 @@ static void call_op(grpc_call_element *elem, grpc_call_element *from_elem,
case GRPC_CANCEL_OP:
cancel_rpc(elem, op);
break;
default:
switch (op->dir) {
case GRPC_CALL_UP:
grpc_call_next_op(elem, op);
break;
case GRPC_CALL_DOWN:
child_elem =
grpc_child_call_get_top_element(calld->s.active.child_call);
GPR_ASSERT(calld->state == CALL_ACTIVE);
child_elem->filter->call_op(child_elem, elem, op);
break;
case GRPC_SEND_MESSAGE:
case GRPC_SEND_FINISH:
case GRPC_REQUEST_DATA:
if (calld->state == CALL_ACTIVE) {
grpc_call_element *child_elem =
grpc_child_call_get_top_element(calld->s.active.child_call);
child_elem->filter->call_op(child_elem, elem, op);
} else {
op->done_cb(op->user_data, GRPC_OP_ERROR);
}
break;
default:
GPR_ASSERT(op->dir == GRPC_CALL_UP);
grpc_call_next_op(elem, op);
break;
}
}

Loading…
Cancel
Save