diff options
author | Yash Tibrewal <yashkt@google.com> | 2018-04-09 14:30:24 -0700 |
---|---|---|
committer | Yash Tibrewal <yashkt@google.com> | 2018-04-09 14:30:24 -0700 |
commit | 6b3db74df988fac2b528ba81aebaf2baa53e7991 (patch) | |
tree | 266d843f8a0e45e2008eef5dfaee2e6a1294980b /src/core/lib/slice | |
parent | 3fd682961a24c9b92c68a058f1949592cc5aacb9 (diff) |
Don't create exec_ctx on the stack if it's already there
Diffstat (limited to 'src/core/lib/slice')
-rw-r--r-- | src/core/lib/slice/slice.cc | 9 | ||||
-rw-r--r-- | src/core/lib/slice/slice_buffer.cc | 14 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/core/lib/slice/slice.cc b/src/core/lib/slice/slice.cc index b1dc02632d..419474129b 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 5c161b8376..fd56997388 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) { |