aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/lib/channel/channel_stack_builder.c2
-rw-r--r--src/cpp/common/channel_filter.h13
2 files changed, 10 insertions, 5 deletions
diff --git a/src/core/lib/channel/channel_stack_builder.c b/src/core/lib/channel/channel_stack_builder.c
index 047d85f44d..dd11e5bf6b 100644
--- a/src/core/lib/channel/channel_stack_builder.c
+++ b/src/core/lib/channel/channel_stack_builder.c
@@ -252,7 +252,7 @@ grpc_error *grpc_channel_stack_builder_finish(
*result = gpr_malloc(prefix_bytes + channel_stack_size);
// fetch a pointer to the channel stack
grpc_channel_stack *channel_stack =
- (grpc_channel_stack *)(*result + prefix_bytes);
+ (grpc_channel_stack *)((char *)(*result) + prefix_bytes);
// and initialize it
grpc_error *error = grpc_channel_stack_init(
exec_ctx, initial_refs, destroy,
diff --git a/src/cpp/common/channel_filter.h b/src/cpp/common/channel_filter.h
index e420efc71c..6bda74b9be 100644
--- a/src/cpp/common/channel_filter.h
+++ b/src/cpp/common/channel_filter.h
@@ -220,6 +220,9 @@ class ChannelData {
if (peer_) gpr_free((void *)peer_);
}
+ /// Initializes the call data.
+ virtual grpc_error *Init() { return GRPC_ERROR_NONE; }
+
/// Caller does NOT take ownership of result.
const char *peer() const { return peer_; }
@@ -276,15 +279,17 @@ class ChannelFilter final {
public:
static const size_t channel_data_size = sizeof(ChannelDataType);
- static void InitChannelElement(grpc_exec_ctx *exec_ctx,
- grpc_channel_element *elem,
- grpc_channel_element_args *args) {
+ static grpc_error *InitChannelElement(grpc_exec_ctx *exec_ctx,
+ grpc_channel_element *elem,
+ grpc_channel_element_args *args) {
const char *peer =
args->optional_transport
? grpc_transport_get_peer(exec_ctx, args->optional_transport)
: nullptr;
// Construct the object in the already-allocated memory.
- new (elem->channel_data) ChannelDataType(*args->channel_args, peer);
+ ChannelDataType* channel_data =
+ new (elem->channel_data) ChannelDataType(*args->channel_args, peer);
+ return channel_data->Init();
}
static void DestroyChannelElement(grpc_exec_ctx *exec_ctx,