diff --git a/src/core/channel/client_channel.c b/src/core/channel/client_channel.c
index c2c23f515646806fb71dd6b45cfa1ac116a122a7..8e8f95fdb357d3a8235c2adbc3321b81bd49d7cb 100644
--- a/src/core/channel/client_channel.c
+++ b/src/core/channel/client_channel.c
@@ -244,6 +244,7 @@ static void cancel_rpc(grpc_call_element *elem, grpc_call_op *op) {
       return; /* early out */
     case CALL_WAITING:
       remove_waiting_child(chand, calld);
+      calld->state = CALL_CANCELLED;
       gpr_mu_unlock(&chand->mu);
       send_up_cancelled_ops(elem);
       calld->s.waiting.on_complete(calld->s.waiting.on_complete_user_data,