aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/node/ext/call.cc18
-rw-r--r--src/node/ext/call.h2
2 files changed, 12 insertions, 8 deletions
diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc
index 62f0130d53..769f744b86 100644
--- a/src/node/ext/call.cc
+++ b/src/node/ext/call.cc
@@ -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();
}
}
diff --git a/src/node/ext/call.h b/src/node/ext/call.h
index cceec9c45b..7fd03ca1de 100644
--- a/src/node/ext/call.h
+++ b/src/node/ext/call.h
@@ -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);