aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext
diff options
context:
space:
mode:
authorGravatar David G. Quintas <dgq@google.com>2017-09-07 15:28:08 -0700
committerGravatar GitHub <noreply@github.com>2017-09-07 15:28:08 -0700
commit4fb50865e0606bdcd67f3b7e5d5faa22d4b523e8 (patch)
tree4cc08088bba12cae867cbb212aefba7c4c9ead13 /src/core/ext
parent8941f607d682d49f0b7c901bffd3e52941e4c5f9 (diff)
parent4dc3c0bdd33892af5a79964ee3e881c7ad86eb3e (diff)
Merge pull request #12104 from dgquintas/filters_prio
Added way to remove filters from channel stack builder
Diffstat (limited to 'src/core/ext')
-rw-r--r--src/core/ext/filters/load_reporting/load_reporting.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/ext/filters/load_reporting/load_reporting.c b/src/core/ext/filters/load_reporting/load_reporting.c
index 9745763c91..b42aa99cdb 100644
--- a/src/core/ext/filters/load_reporting/load_reporting.c
+++ b/src/core/ext/filters/load_reporting/load_reporting.c
@@ -42,9 +42,15 @@ static bool maybe_add_load_reporting_filter(grpc_exec_ctx *exec_ctx,
void *arg) {
const grpc_channel_args *args =
grpc_channel_stack_builder_get_channel_arguments(builder);
- if (is_load_reporting_enabled(args)) {
- return grpc_channel_stack_builder_prepend_filter(
- builder, (const grpc_channel_filter *)arg, NULL, NULL);
+ const grpc_channel_filter *filter = arg;
+ grpc_channel_stack_builder_iterator *it =
+ grpc_channel_stack_builder_iterator_find(builder, filter->name);
+ const bool already_has_load_reporting_filter =
+ !grpc_channel_stack_builder_iterator_is_end(it);
+ grpc_channel_stack_builder_iterator_destroy(it);
+ if (is_load_reporting_enabled(args) && !already_has_load_reporting_filter) {
+ return grpc_channel_stack_builder_prepend_filter(builder, filter, NULL,
+ NULL);
}
return true;
}