Node: consolidate call destruction logic

pull/10468/head
murgatroid99 8 years ago
parent 130568e515
commit 2a4ea2daaf
  1. 18
      src/node/ext/call.cc
  2. 2
      src/node/ext/call.h

@ -515,16 +515,20 @@ void DestroyTag(void *tag) {
delete tag_struct;
}
void Call::DestroyCall() {
if (this->wrapped_call != NULL) {
grpc_call_destroy(this->wrapped_call);
this->wrapped_call = NULL;
}
}
Call::Call(grpc_call *call) : wrapped_call(call),
pending_batches(0),
has_final_op_completed(false) {
}
Call::~Call() {
if (wrapped_call != NULL) {
grpc_call_destroy(wrapped_call);
wrapped_call = NULL;
}
DestroyCall();
}
void Call::Init(Local<Object> exports) {
@ -570,10 +574,8 @@ void Call::CompleteBatch(bool is_final_op) {
this->has_final_op_completed = true;
}
this->pending_batches--;
if (this->has_final_op_completed && this->pending_batches == 0 &&
this->wrapped_call != NULL) {
grpc_call_destroy(this->wrapped_call);
this->wrapped_call = NULL;
if (this->has_final_op_completed && this->pending_batches == 0) {
this->DestroyCall();
}
}

@ -76,6 +76,8 @@ class Call : public Nan::ObjectWrap {
Call(const Call &);
Call &operator=(const Call &);
void DestroyCall();
static NAN_METHOD(New);
static NAN_METHOD(StartBatch);
static NAN_METHOD(Cancel);

Loading…
Cancel
Save