diff --git a/packages/grpc-native-core/ext/call.cc b/packages/grpc-native-core/ext/call.cc index 7738af369..efaaa7c0e 100644 --- a/packages/grpc-native-core/ext/call.cc +++ b/packages/grpc-native-core/ext/call.cc @@ -158,7 +158,7 @@ Local ParseMetadata(const grpc_metadata_array *metadata_array) { array = Local::Cast(maybe_array.ToLocalChecked()); } if (grpc_is_binary_header(elem->key)) { - Nan::Set(array, array->Length(), CreateBufferFromSlice(elem->value)); + Nan::Set(array, array->Length(), CopyBufferFromSlice(elem->value)); } else { // TODO(murgatroid99): Use zero-copy string construction instead Nan::Set(array, array->Length(), CopyStringFromSlice(elem->value)); diff --git a/packages/grpc-native-core/ext/slice.cc b/packages/grpc-native-core/ext/slice.cc index 49bc05b01..144635544 100644 --- a/packages/grpc-native-core/ext/slice.cc +++ b/packages/grpc-native-core/ext/slice.cc @@ -33,12 +33,6 @@ using v8::String; using v8::Value; namespace { -void SliceFreeCallback(char *data, void *hint) { - grpc_slice *slice = reinterpret_cast(hint); - grpc_slice_unref(*slice); - delete slice; -} - void string_destroy_func(void *user_data) { delete reinterpret_cast(user_data); } @@ -74,16 +68,12 @@ Local CopyStringFromSlice(const grpc_slice slice) { .ToLocalChecked()); } -Local CreateBufferFromSlice(const grpc_slice slice) { +Local CopyBufferFromSlice(const grpc_slice slice) { Nan::EscapableHandleScope scope; - grpc_slice *slice_ptr = new grpc_slice; - *slice_ptr = grpc_slice_ref(slice); return scope.Escape( - Nan::NewBuffer( - const_cast( - reinterpret_cast(GRPC_SLICE_START_PTR(*slice_ptr))), - GRPC_SLICE_LENGTH(*slice_ptr), SliceFreeCallback, slice_ptr) - .ToLocalChecked()); + Nan::CopyBuffer(reinterpret_cast(GRPC_SLICE_START_PTR(slice)), + GRPC_SLICE_LENGTH(slice)) + .ToLocalChecked()); } } // namespace node diff --git a/packages/grpc-native-core/ext/slice.h b/packages/grpc-native-core/ext/slice.h index 0a652c575..69110bb34 100644 --- a/packages/grpc-native-core/ext/slice.h +++ b/packages/grpc-native-core/ext/slice.h @@ -32,7 +32,7 @@ grpc_slice CreateSliceFromBuffer(const v8::Local source); v8::Local CopyStringFromSlice(const grpc_slice slice); -v8::Local CreateBufferFromSlice(const grpc_slice slice); +v8::Local CopyBufferFromSlice(const grpc_slice slice); } // namespace node } // namespace grpc