diff --git a/src/core/lib/iomgr/buffer_pool.c b/src/core/lib/iomgr/buffer_pool.c
index 46dd6d9ce1cba33700c033ea1c5357ee3c25cf3d..d2464ff07990af161013c2841126f5d0669112a9 100644
--- a/src/core/lib/iomgr/buffer_pool.c
+++ b/src/core/lib/iomgr/buffer_pool.c
@@ -321,6 +321,8 @@ grpc_buffer_pool *grpc_buffer_pool_create(void) {
   buffer_pool->combiner = grpc_combiner_create(NULL);
   buffer_pool->free_pool = INT64_MAX;
   buffer_pool->size = INT64_MAX;
+  buffer_pool->step_scheduled = false;
+  buffer_pool->reclaiming = false;
   grpc_closure_init(&buffer_pool->bpstep_closure, bpstep, buffer_pool);
   grpc_closure_init(&buffer_pool->bpreclaimation_done_closure,
                     bpreclaimation_done_closure, buffer_pool);
@@ -404,8 +406,8 @@ void grpc_buffer_user_alloc(grpc_exec_ctx *exec_ctx,
                             grpc_buffer_user *buffer_user, size_t size,
                             grpc_closure *optional_on_done) {
   gpr_mu_lock(&buffer_user->mu);
-  buffer_user->allocated += size;
-  buffer_user->free_pool -= size;
+  buffer_user->allocated += (int64_t)size;
+  buffer_user->free_pool -= (int64_t)size;
   if (buffer_user->free_pool < 0) {
     grpc_closure_list_append(&buffer_user->on_allocated, optional_on_done,
                              GRPC_ERROR_NONE);
@@ -426,8 +428,8 @@ void grpc_buffer_user_free(grpc_exec_ctx *exec_ctx,
   gpr_mu_lock(&buffer_user->mu);
   GPR_ASSERT(buffer_user->allocated >= (int64_t)size);
   bool was_zero_or_negative = buffer_user->free_pool <= 0;
-  buffer_user->free_pool += size;
-  buffer_user->allocated -= size;
+  buffer_user->free_pool += (int64_t)size;
+  buffer_user->allocated -= (int64_t)size;
   bool is_bigger_than_zero = buffer_user->free_pool > 0;
   if (is_bigger_than_zero && was_zero_or_negative &&
       !buffer_user->added_to_free_pool) {