diff --git a/src/core/ext/filters/deadline/deadline_filter.cc b/src/core/ext/filters/deadline/deadline_filter.cc index 50ce988173e..588827b9584 100644 --- a/src/core/ext/filters/deadline/deadline_filter.cc +++ b/src/core/ext/filters/deadline/deadline_filter.cc @@ -369,7 +369,17 @@ const grpc_channel_filter grpc_server_deadline_filter = { } return next_promise_factory(std::move(call_args)); }, - /* init_call: */ nullptr, + [](grpc_channel_element*, grpc_core::CallSpineInterface* spine) { + spine->client_initial_metadata().receiver.InterceptAndMap( + [](grpc_core::ClientMetadataHandle md) { + auto deadline = md->get(grpc_core::GrpcTimeoutMetadata()); + if (deadline.has_value()) { + grpc_core::GetContext()->UpdateDeadline( + *deadline); + } + return md; + }); + }, grpc_channel_next_op, sizeof(server_call_data), deadline_init_call_elem,