Skip to content

Commit

Permalink
Merge pull request #1610 from murgatroid99/native_metadata_buffer_fix
Browse files Browse the repository at this point in the history
Native: Copy slice data into Buffer when receiving binary metadata
  • Loading branch information
murgatroid99 committed Oct 29, 2020
2 parents 23b3795 + ee0fd3f commit 78a96f5
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 16 deletions.
2 changes: 1 addition & 1 deletion packages/grpc-native-core/ext/call.cc
Expand Up @@ -158,7 +158,7 @@ Local<Value> ParseMetadata(const grpc_metadata_array *metadata_array) {
array = Local<Array>::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));
Expand Down
18 changes: 4 additions & 14 deletions packages/grpc-native-core/ext/slice.cc
Expand Up @@ -33,12 +33,6 @@ using v8::String;
using v8::Value;

namespace {
void SliceFreeCallback(char *data, void *hint) {
grpc_slice *slice = reinterpret_cast<grpc_slice *>(hint);
grpc_slice_unref(*slice);
delete slice;
}

void string_destroy_func(void *user_data) {
delete reinterpret_cast<Nan::Utf8String *>(user_data);
}
Expand Down Expand Up @@ -74,16 +68,12 @@ Local<String> CopyStringFromSlice(const grpc_slice slice) {
.ToLocalChecked());
}

Local<Value> CreateBufferFromSlice(const grpc_slice slice) {
Local<Value> 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<char *>(
reinterpret_cast<const char *>(GRPC_SLICE_START_PTR(*slice_ptr))),
GRPC_SLICE_LENGTH(*slice_ptr), SliceFreeCallback, slice_ptr)
.ToLocalChecked());
Nan::CopyBuffer(reinterpret_cast<const char *>(GRPC_SLICE_START_PTR(slice)),
GRPC_SLICE_LENGTH(slice))
.ToLocalChecked());
}

} // namespace node
Expand Down
2 changes: 1 addition & 1 deletion packages/grpc-native-core/ext/slice.h
Expand Up @@ -32,7 +32,7 @@ grpc_slice CreateSliceFromBuffer(const v8::Local<v8::Value> source);

v8::Local<v8::String> CopyStringFromSlice(const grpc_slice slice);

v8::Local<v8::Value> CreateBufferFromSlice(const grpc_slice slice);
v8::Local<v8::Value> CopyBufferFromSlice(const grpc_slice slice);

} // namespace node
} // namespace grpc

0 comments on commit 78a96f5

Please sign in to comment.