From e85477646c5b6ec159715a7e8d9ebaaf6d451777 Mon Sep 17 00:00:00 2001
From: "Mark D. Roth" <roth@google.com>
Date: Mon, 28 Nov 2016 17:42:53 +0000
Subject: [PATCH] Fix build problems.

---
 src/core/lib/channel/channel_stack_builder.c |  2 +-
 src/cpp/common/channel_filter.h              | 13 +++++++++----
 test/core/channel/channel_stack_test.c       |  7 ++++---
 3 files changed, 14 insertions(+), 8 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,
diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c
index 0840820cca..b43d05eec3 100644
--- a/test/core/channel/channel_stack_test.c
+++ b/test/core/channel/channel_stack_test.c
@@ -41,9 +41,9 @@
 
 #include "test/core/util/test_config.h"
 
-static void channel_init_func(grpc_exec_ctx *exec_ctx,
-                              grpc_channel_element *elem,
-                              grpc_channel_element_args *args) {
+static grpc_error *channel_init_func(grpc_exec_ctx *exec_ctx,
+                                     grpc_channel_element *elem,
+                                     grpc_channel_element_args *args) {
   GPR_ASSERT(args->channel_args->num_args == 1);
   GPR_ASSERT(args->channel_args->args[0].type == GRPC_ARG_INTEGER);
   GPR_ASSERT(0 == strcmp(args->channel_args->args[0].key, "test_key"));
@@ -51,6 +51,7 @@ static void channel_init_func(grpc_exec_ctx *exec_ctx,
   GPR_ASSERT(args->is_first);
   GPR_ASSERT(args->is_last);
   *(int *)(elem->channel_data) = 0;
+  return GRPC_ERROR_NONE;
 }
 
 static grpc_error *call_init_func(grpc_exec_ctx *exec_ctx,
-- 
GitLab