summaryrefslogtreecommitdiff
path: root/grpc/src/core/lib/channel/channel_stack.cc
diff options
context:
space:
mode:
Diffstat (limited to 'grpc/src/core/lib/channel/channel_stack.cc')
-rw-r--r--grpc/src/core/lib/channel/channel_stack.cc31
1 files changed, 22 insertions, 9 deletions
diff --git a/grpc/src/core/lib/channel/channel_stack.cc b/grpc/src/core/lib/channel/channel_stack.cc
index e9b34897..122d7a91 100644
--- a/grpc/src/core/lib/channel/channel_stack.cc
+++ b/grpc/src/core/lib/channel/channel_stack.cc
@@ -81,12 +81,24 @@ grpc_channel_element* grpc_channel_stack_last_element(
return grpc_channel_stack_element(channel_stack, channel_stack->count - 1);
}
+size_t grpc_channel_stack_filter_instance_number(
+ grpc_channel_stack* channel_stack, grpc_channel_element* elem) {
+ size_t num_found = 0;
+ for (size_t i = 0; i < channel_stack->count; ++i) {
+ grpc_channel_element* element =
+ grpc_channel_stack_element(channel_stack, i);
+ if (element == elem) break;
+ if (element->filter == elem->filter) ++num_found;
+ }
+ return num_found;
+}
+
grpc_call_element* grpc_call_stack_element(grpc_call_stack* call_stack,
size_t index) {
return CALL_ELEMS_FROM_STACK(call_stack) + index;
}
-grpc_error* grpc_channel_stack_init(
+grpc_error_handle grpc_channel_stack_init(
int initial_refs, grpc_iomgr_cb_func destroy, void* destroy_arg,
const grpc_channel_filter** filters, size_t filter_count,
const grpc_channel_args* channel_args, grpc_transport* optional_transport,
@@ -108,7 +120,7 @@ grpc_error* grpc_channel_stack_init(
sizeof(grpc_channel_element));
/* init per-filter data */
- grpc_error* first_error = GRPC_ERROR_NONE;
+ grpc_error_handle first_error = GRPC_ERROR_NONE;
for (i = 0; i < filter_count; i++) {
args.channel_stack = stack;
args.channel_args = channel_args;
@@ -117,7 +129,8 @@ grpc_error* grpc_channel_stack_init(
args.is_last = i == (filter_count - 1);
elems[i].filter = filters[i];
elems[i].channel_data = user_data;
- grpc_error* error = elems[i].filter->init_channel_elem(&elems[i], &args);
+ grpc_error_handle error =
+ elems[i].filter->init_channel_elem(&elems[i], &args);
if (error != GRPC_ERROR_NONE) {
if (first_error == GRPC_ERROR_NONE) {
first_error = error;
@@ -149,10 +162,10 @@ void grpc_channel_stack_destroy(grpc_channel_stack* stack) {
}
}
-grpc_error* grpc_call_stack_init(grpc_channel_stack* channel_stack,
- int initial_refs, grpc_iomgr_cb_func destroy,
- void* destroy_arg,
- const grpc_call_element_args* elem_args) {
+grpc_error_handle grpc_call_stack_init(
+ grpc_channel_stack* channel_stack, int initial_refs,
+ grpc_iomgr_cb_func destroy, void* destroy_arg,
+ const grpc_call_element_args* elem_args) {
grpc_channel_element* channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack);
size_t count = channel_stack->count;
grpc_call_element* call_elems;
@@ -166,7 +179,7 @@ grpc_error* grpc_call_stack_init(grpc_channel_stack* channel_stack,
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element));
/* init per-filter data */
- grpc_error* first_error = GRPC_ERROR_NONE;
+ grpc_error_handle first_error = GRPC_ERROR_NONE;
for (size_t i = 0; i < count; i++) {
call_elems[i].filter = channel_elems[i].filter;
call_elems[i].channel_data = channel_elems[i].channel_data;
@@ -175,7 +188,7 @@ grpc_error* grpc_call_stack_init(grpc_channel_stack* channel_stack,
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(call_elems[i].filter->sizeof_call_data);
}
for (size_t i = 0; i < count; i++) {
- grpc_error* error =
+ grpc_error_handle error =
call_elems[i].filter->init_call_elem(&call_elems[i], elem_args);
if (error != GRPC_ERROR_NONE) {
if (first_error == GRPC_ERROR_NONE) {