diff --git a/ext/call.cc b/ext/call.cc index 3452af94..cdc34b52 100644 --- a/ext/call.cc +++ b/ext/call.cc @@ -98,6 +98,9 @@ bool CreateMetadataArray( string_handles->push_back(unique_ptr(utf8_key)); Handle values = Local::Cast(metadata->Get(current_key)); for (unsigned int j = 0; j < values->Length(); j++) { + if (array->count >= array->capacity) { + gpr_log(GPR_ERROR, "Metadata array grew past capacity"); + } Handle value = values->Get(j); grpc_metadata *current = &array->metadata[array->count]; current->key = **utf8_key; @@ -433,9 +436,9 @@ Handle GetTagNodeValue(void *tag) { return NanEscapeScope(tag_obj); } -NanCallback GetTagCallback(void *tag) { +NanCallback *GetTagCallback(void *tag) { struct tag *tag_struct = reinterpret_cast(tag); - return *tag_struct->callback; + return tag_struct->callback; } void DestroyTag(void *tag) { @@ -598,6 +601,7 @@ NAN_METHOD(Call::StartBatch) { grpc_call_error error = grpc_call_start_batch( call->wrapped_call, ops, nops, new struct tag( callback, op_vector, handles, strings)); + delete ops; if (error != GRPC_CALL_OK) { return NanThrowError("startBatch failed", error); } diff --git a/ext/call.h b/ext/call.h index b8792713..f443a046 100644 --- a/ext/call.h +++ b/ext/call.h @@ -89,7 +89,7 @@ struct tag { v8::Handle GetTagNodeValue(void *tag); -NanCallback GetTagCallback(void *tag); +NanCallback *GetTagCallback(void *tag); void DestroyTag(void *tag); diff --git a/ext/completion_queue_async_worker.cc b/ext/completion_queue_async_worker.cc index dbacdf03..3c32b07c 100644 --- a/ext/completion_queue_async_worker.cc +++ b/ext/completion_queue_async_worker.cc @@ -80,10 +80,10 @@ void CompletionQueueAsyncWorker::Init(Handle exports) { void CompletionQueueAsyncWorker::HandleOKCallback() { NanScope(); gpr_log(GPR_DEBUG, "Handling response on call %p", result->call); - NanCallback callback = GetTagCallback(result->tag); + NanCallback *callback = GetTagCallback(result->tag); Handle argv[] = {NanNull(), GetTagNodeValue(result->tag)}; - callback.Call(2, argv); + callback->Call(2, argv); DestroyTag(result->tag); grpc_event_finish(result); @@ -92,10 +92,10 @@ void CompletionQueueAsyncWorker::HandleOKCallback() { void CompletionQueueAsyncWorker::HandleErrorCallback() { NanScope(); - NanCallback callback = GetTagCallback(result->tag); + NanCallback *callback = GetTagCallback(result->tag); Handle argv[] = {NanError(ErrorMessage())}; - callback.Call(1, argv); + callback->Call(1, argv); DestroyTag(result->tag); grpc_event_finish(result); diff --git a/test/call_test.js b/test/call_test.js index e341092f..1cbfc228 100644 --- a/test/call_test.js +++ b/test/call_test.js @@ -1,6 +1,6 @@ /* * - * Copyright 2014, Google Inc. + * Copyright 2015, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/test/end_to_end_test.js b/test/end_to_end_test.js index d4344608..34ce2500 100644 --- a/test/end_to_end_test.js +++ b/test/end_to_end_test.js @@ -67,7 +67,7 @@ describe('end-to-end', function() { after(function() { server.shutdown(); }); - it.skip('should start and end a request without error', function(complete) { + it('should start and end a request without error', function(complete) { var done = multiDone(complete, 2); var deadline = new Date(); deadline.setSeconds(deadline.getSeconds() + 3);