aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/filters/deadline
diff options
context:
space:
mode:
authorGravatar Mark D. Roth <roth@google.com>2018-06-08 14:22:12 -0700
committerGravatar GitHub <noreply@github.com>2018-06-08 14:22:12 -0700
commitf3715134458cb14efd855d948f229dc2661b4028 (patch)
treef3569a69146e234a77463f4219f6513cafce77f1 /src/core/ext/filters/deadline
parent6fcbee0d03a20c61ac2ba785a7524cd84e888108 (diff)
Revert "move recv_trailing_metadata into its own callback, don't use on_complete for recv_ops"
Diffstat (limited to 'src/core/ext/filters/deadline')
-rw-r--r--src/core/ext/filters/deadline/deadline_filter.cc28
-rw-r--r--src/core/ext/filters/deadline/deadline_filter.h10
2 files changed, 17 insertions, 21 deletions
diff --git a/src/core/ext/filters/deadline/deadline_filter.cc b/src/core/ext/filters/deadline/deadline_filter.cc
index d575d2d983..27d3eac8d6 100644
--- a/src/core/ext/filters/deadline/deadline_filter.cc
+++ b/src/core/ext/filters/deadline/deadline_filter.cc
@@ -128,25 +128,21 @@ static void cancel_timer_if_needed(grpc_deadline_state* deadline_state) {
}
}
-// Callback run when we receive trailing metadata.
-static void recv_trailing_metadata_ready(void* arg, grpc_error* error) {
+// Callback run when the call is complete.
+static void on_complete(void* arg, grpc_error* error) {
grpc_deadline_state* deadline_state = static_cast<grpc_deadline_state*>(arg);
cancel_timer_if_needed(deadline_state);
- // Invoke the original callback.
- GRPC_CLOSURE_RUN(deadline_state->original_recv_trailing_metadata_ready,
- GRPC_ERROR_REF(error));
+ // Invoke the next callback.
+ GRPC_CLOSURE_RUN(deadline_state->next_on_complete, GRPC_ERROR_REF(error));
}
-// Inject our own recv_trailing_metadata_ready callback into op.
-static void inject_recv_trailing_metadata_ready(
- grpc_deadline_state* deadline_state, grpc_transport_stream_op_batch* op) {
- deadline_state->original_recv_trailing_metadata_ready =
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
- GRPC_CLOSURE_INIT(&deadline_state->recv_trailing_metadata_ready,
- recv_trailing_metadata_ready, deadline_state,
+// Inject our own on_complete callback into op.
+static void inject_on_complete_cb(grpc_deadline_state* deadline_state,
+ grpc_transport_stream_op_batch* op) {
+ deadline_state->next_on_complete = op->on_complete;
+ GRPC_CLOSURE_INIT(&deadline_state->on_complete, on_complete, deadline_state,
grpc_schedule_on_exec_ctx);
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
- &deadline_state->recv_trailing_metadata_ready;
+ op->on_complete = &deadline_state->on_complete;
}
// Callback and associated state for starting the timer after call stack
@@ -230,7 +226,7 @@ void grpc_deadline_state_client_start_transport_stream_op_batch(
// Make sure we know when the call is complete, so that we can cancel
// the timer.
if (op->recv_trailing_metadata) {
- inject_recv_trailing_metadata_ready(deadline_state, op);
+ inject_on_complete_cb(deadline_state, op);
}
}
}
@@ -327,7 +323,7 @@ static void server_start_transport_stream_op_batch(
// the client never sends trailing metadata, because this is the
// hook that tells us when the call is complete on the server side.
if (op->recv_trailing_metadata) {
- inject_recv_trailing_metadata_ready(&calld->base.deadline_state, op);
+ inject_on_complete_cb(&calld->base.deadline_state, op);
}
}
// Chain to next filter.
diff --git a/src/core/ext/filters/deadline/deadline_filter.h b/src/core/ext/filters/deadline/deadline_filter.h
index 1d797f445a..13207cbd6f 100644
--- a/src/core/ext/filters/deadline/deadline_filter.h
+++ b/src/core/ext/filters/deadline/deadline_filter.h
@@ -37,12 +37,12 @@ typedef struct grpc_deadline_state {
grpc_deadline_timer_state timer_state;
grpc_timer timer;
grpc_closure timer_callback;
- // Closure to invoke when we receive trailing metadata.
+ // Closure to invoke when the call is complete.
// We use this to cancel the timer.
- grpc_closure recv_trailing_metadata_ready;
- // The original recv_trailing_metadata_ready closure, which we chain to
- // after our own closure is invoked.
- grpc_closure* original_recv_trailing_metadata_ready;
+ grpc_closure on_complete;
+ // The original on_complete closure, which we chain to after our own
+ // closure is invoked.
+ grpc_closure* next_on_complete;
} grpc_deadline_state;
//