diff --git a/src/core/channel/client_channel.c b/src/core/channel/client_channel.c
index 78f8d06d89f185b9b99fb4f237b5a67a27a9fc86..42e242ae81b27ad0632cd7d685d3a078b82c9fe1 100644
--- a/src/core/channel/client_channel.c
+++ b/src/core/channel/client_channel.c
@@ -144,6 +144,7 @@ static void handle_op_after_cancellation(grpc_call_element *elem,
   call_data *calld = elem->call_data;
   channel_data *chand = elem->channel_data;
   if (op->send_ops) {
+    grpc_stream_ops_unref_owned_objects(op->send_ops->ops, op->send_ops->nops);
     op->on_done_send(op->send_user_data, 0);
   }
   if (op->recv_ops) {
diff --git a/src/core/surface/lame_client.c b/src/core/surface/lame_client.c
index 3186292a02bf3d435988b4e6d4d21957587d9a48..a3b0b2672b6c0c593b855a2b7c41aca0ba79bf05 100644
--- a/src/core/surface/lame_client.c
+++ b/src/core/surface/lame_client.c
@@ -55,6 +55,7 @@ static void lame_start_transport_op(grpc_call_element *elem,
   channel_data *chand = elem->channel_data;
   GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
   if (op->send_ops) {
+    grpc_stream_ops_unref_owned_objects(op->send_ops->ops, op->send_ops->nops);
     op->on_done_send(op->send_user_data, 0);
   }
   if (op->recv_ops) {