From 6b3db74df988fac2b528ba81aebaf2baa53e7991 Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Mon, 9 Apr 2018 14:30:24 -0700 Subject: [PATCH] Don't create exec_ctx on the stack if it's already there --- src/core/lib/slice/slice.cc | 9 ++++++++- src/core/lib/slice/slice_buffer.cc | 14 ++++++++++++-- test/core/end2end/tests/resource_quota_server.cc | 2 -- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/core/lib/slice/slice.cc b/src/core/lib/slice/slice.cc index b1dc02632dd..419474129b6 100644 --- a/src/core/lib/slice/slice.cc +++ b/src/core/lib/slice/slice.cc @@ -68,7 +68,14 @@ grpc_slice grpc_slice_ref(grpc_slice slice) { } /* Public API */ -void grpc_slice_unref(grpc_slice slice) { grpc_slice_unref_internal(slice); } +void grpc_slice_unref(grpc_slice slice) { + if (grpc_core::ExecCtx::Get() == nullptr) { + grpc_core::ExecCtx exec_ctx; + grpc_slice_unref_internal(slice); + } else { + grpc_slice_unref_internal(slice); + } +} /* grpc_slice_from_static_string support structure - a refcount that does nothing */ diff --git a/src/core/lib/slice/slice_buffer.cc b/src/core/lib/slice/slice_buffer.cc index 5c161b8376e..fd56997388c 100644 --- a/src/core/lib/slice/slice_buffer.cc +++ b/src/core/lib/slice/slice_buffer.cc @@ -75,7 +75,12 @@ void grpc_slice_buffer_destroy_internal(grpc_slice_buffer* sb) { } void grpc_slice_buffer_destroy(grpc_slice_buffer* sb) { - grpc_slice_buffer_destroy_internal(sb); + if (grpc_core::ExecCtx::Get() == nullptr) { + grpc_core::ExecCtx exec_ctx; + grpc_slice_buffer_destroy_internal(sb); + } else { + grpc_slice_buffer_destroy_internal(sb); + } } uint8_t* grpc_slice_buffer_tiny_add(grpc_slice_buffer* sb, size_t n) { @@ -175,7 +180,12 @@ void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer* sb) { } void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer* sb) { - grpc_slice_buffer_reset_and_unref_internal(sb); + if (grpc_core::ExecCtx::Get() == nullptr) { + grpc_core::ExecCtx exec_ctx; + grpc_slice_buffer_reset_and_unref_internal(sb); + } else { + grpc_slice_buffer_reset_and_unref_internal(sb); + } } void grpc_slice_buffer_swap(grpc_slice_buffer* a, grpc_slice_buffer* b) { diff --git a/test/core/end2end/tests/resource_quota_server.cc b/test/core/end2end/tests/resource_quota_server.cc index bf939f56105..df83caa6625 100644 --- a/test/core/end2end/tests/resource_quota_server.cc +++ b/test/core/end2end/tests/resource_quota_server.cc @@ -26,7 +26,6 @@ #include #include -#include "src/core/lib/iomgr/exec_ctx.h" #include "test/core/end2end/cq_verifier.h" static void* tag(intptr_t t) { return (void*)t; } @@ -107,7 +106,6 @@ void resource_quota_server(grpc_end2end_test_config config) { FEATURE_MASK_DOES_NOT_SUPPORT_RESOURCE_QUOTA_SERVER) { return; } - grpc_core::ExecCtx exec_ctx; grpc_resource_quota* resource_quota = grpc_resource_quota_create("test_server"); grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024);