From 5dc577b517f4510fa0fbf2668f28bf1a0bdf4f6a Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Fri, 30 Mar 2018 15:45:00 -0700 Subject: [PATCH 1/3] Remove exec_ctx from slice and slice buffer --- src/core/lib/slice/slice.cc | 5 +---- src/core/lib/slice/slice_buffer.cc | 2 -- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/core/lib/slice/slice.cc b/src/core/lib/slice/slice.cc index 585b41cf916..b1dc02632dd 100644 --- a/src/core/lib/slice/slice.cc +++ b/src/core/lib/slice/slice.cc @@ -68,10 +68,7 @@ grpc_slice grpc_slice_ref(grpc_slice slice) { } /* Public API */ -void grpc_slice_unref(grpc_slice slice) { - grpc_core::ExecCtx exec_ctx; - grpc_slice_unref_internal(slice); -} +void grpc_slice_unref(grpc_slice slice) { 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 58ca4955170..5c161b8376e 100644 --- a/src/core/lib/slice/slice_buffer.cc +++ b/src/core/lib/slice/slice_buffer.cc @@ -75,7 +75,6 @@ void grpc_slice_buffer_destroy_internal(grpc_slice_buffer* sb) { } void grpc_slice_buffer_destroy(grpc_slice_buffer* sb) { - grpc_core::ExecCtx exec_ctx; grpc_slice_buffer_destroy_internal(sb); } @@ -176,7 +175,6 @@ void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer* sb) { } void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer* sb) { - grpc_core::ExecCtx exec_ctx; grpc_slice_buffer_reset_and_unref_internal(sb); } From 3fd682961a24c9b92c68a058f1949592cc5aacb9 Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Fri, 30 Mar 2018 17:03:39 -0700 Subject: [PATCH 2/3] Create exec_ctx on stack for resource_quota_server test --- test/core/end2end/tests/resource_quota_server.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/core/end2end/tests/resource_quota_server.cc b/test/core/end2end/tests/resource_quota_server.cc index df83caa6625..bf939f56105 100644 --- a/test/core/end2end/tests/resource_quota_server.cc +++ b/test/core/end2end/tests/resource_quota_server.cc @@ -26,6 +26,7 @@ #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; } @@ -106,6 +107,7 @@ 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); From 6b3db74df988fac2b528ba81aebaf2baa53e7991 Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Mon, 9 Apr 2018 14:30:24 -0700 Subject: [PATCH 3/3] 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);