From a11079ba4b50bc002c122400d3e3a98f29224eda Mon Sep 17 00:00:00 2001 From: Seongjin Cho Date: Mon, 30 Nov 2015 05:15:58 +0900 Subject: [PATCH 1/3] Memory leak fix? --- ext/call.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ext/call.cc b/ext/call.cc index a98ae854..c0e2b0f0 100644 --- a/ext/call.cc +++ b/ext/call.cc @@ -234,6 +234,14 @@ class SendMetadataOp : public Op { class SendMessageOp : public Op { public: + SendMessageOp() { + send_message = NULL; + } + ~SendMessageOp() { + if (send_message != NULL) { + grpc_byte_buffer_destroy(send_message); + } + } Local GetNodeValue() const { EscapableHandleScope scope; return scope.Escape(Nan::True()); @@ -253,7 +261,8 @@ class SendMessageOp : public Op { out->flags = maybe_flag.FromMaybe(0) & GRPC_WRITE_USED_MASK; } } - out->data.send_message = BufferToByteBuffer(value); + send_message = BufferToByteBuffer(value); + out->data.send_message = send_message; PersistentValue *handle = new PersistentValue(value); resources->handles.push_back(unique_ptr(handle)); return true; @@ -262,6 +271,8 @@ class SendMessageOp : public Op { std::string GetTypeString() const { return "send_message"; } + private: + grpc_byte_buffer *send_message; }; class SendClientCloseOp : public Op { From b791684b4c1caf178bc5fd6e37b6d7e3c440a6e1 Mon Sep 17 00:00:00 2001 From: Seongjin Cho Date: Tue, 1 Dec 2015 11:13:15 +0900 Subject: [PATCH 2/3] Fixes memory leak when receiving data --- ext/byte_buffer.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/byte_buffer.cc b/ext/byte_buffer.cc index e1786ddb..c306292c 100644 --- a/ext/byte_buffer.cc +++ b/ext/byte_buffer.cc @@ -77,6 +77,7 @@ Local ByteBufferToBuffer(grpc_byte_buffer *buffer) { while (grpc_byte_buffer_reader_next(&reader, &next) != 0) { memcpy(result + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next)); offset += GPR_SLICE_LENGTH(next); + gpr_slice_unref(next); } return scope.Escape(MakeFastBuffer( Nan::NewBuffer(result, length).ToLocalChecked())); From 09b021ae6d6eb92a9dce0bf635659ea3e6af359b Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 4 Dec 2015 15:15:41 -0800 Subject: [PATCH 3/3] Generalize metadata plugin arguments to future-proof it --- src/credentials.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/credentials.js b/src/credentials.js index ff10a22e..dcbfac18 100644 --- a/src/credentials.js +++ b/src/credentials.js @@ -91,7 +91,7 @@ exports.createSsl = ChannelCredentials.createSsl; */ exports.createFromMetadataGenerator = function(metadata_generator) { return CallCredentials.createFromPlugin(function(service_url, callback) { - metadata_generator(service_url, function(error, metadata) { + metadata_generator({service_url: service_url}, function(error, metadata) { var code = grpc.status.OK; var message = ''; if (error) { @@ -114,7 +114,8 @@ exports.createFromMetadataGenerator = function(metadata_generator) { * @return {CallCredentials} The resulting credentials object */ exports.createFromGoogleCredential = function(google_credential) { - return exports.createFromMetadataGenerator(function(service_url, callback) { + return exports.createFromMetadataGenerator(function(auth_context, callback) { + var service_url = auth_context.service_url; google_credential.getRequestMetadata(service_url, function(err, header) { if (err) { callback(err);