Skip to content

Commit 0cd71d9

Browse files
authored
Merge pull request #234 from ofrobots/nan-callback
fix: avoid using deprecated Nan APIs
2 parents f54301a + 4bfa143 commit 0cd71d9

File tree

6 files changed

+32
-10
lines changed

6 files changed

+32
-10
lines changed

packages/grpc-native-core/ext/call.cc

+8-3
Original file line numberDiff line numberDiff line change
@@ -446,13 +446,18 @@ class ServerCloseResponseOp : public Op {
446446
};
447447

448448
tag::tag(Callback *callback, OpVec *ops, Call *call, Local<Value> call_value)
449-
: callback(callback), ops(ops), call(call) {
449+
: callback(callback),
450+
async_resource(NULL),
451+
ops(ops),
452+
call(call) {
450453
HandleScope scope;
454+
async_resource = new Nan::AsyncResource("grpc:tag"); // Needs handle scope.
451455
call_persist.Reset(call_value);
452456
}
453457

454458
tag::~tag() {
455459
delete callback;
460+
delete async_resource;
456461
delete ops;
457462
}
458463

@@ -468,10 +473,10 @@ void CompleteTag(void *tag, const char *error_message) {
468473
Nan::Set(tag_obj, op_ptr->GetOpType(), op_ptr->GetNodeValue());
469474
}
470475
Local<Value> argv[] = {Nan::Null(), tag_obj};
471-
callback->Call(2, argv);
476+
callback->Call(2, argv, tag_struct->async_resource);
472477
} else {
473478
Local<Value> argv[] = {Nan::Error(error_message)};
474-
callback->Call(1, argv);
479+
callback->Call(1, argv, tag_struct->async_resource);
475480
}
476481
bool success = (error_message == NULL);
477482
bool is_final_op = false;

packages/grpc-native-core/ext/call.h

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ struct tag {
103103
v8::Local<v8::Value> call_value);
104104
~tag();
105105
Nan::Callback *callback;
106+
Nan::AsyncResource *async_resource;
106107
OpVec *ops;
107108
Call *call;
108109
Nan::Persistent<v8::Value, Nan::CopyablePersistentTraits<v8::Value>>

packages/grpc-native-core/ext/call_credentials.cc

+4-5
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ NAUV_WORK_CB(SendPluginCallback) {
233233
// Get Local<Function> from Nan::Callback*
234234
**plugin_callback};
235235
Nan::Callback *callback = state->callback;
236-
callback->Call(argc, argv);
236+
callback->Call(argc, argv, data->async_resource);
237237
delete data;
238238
}
239239
}
@@ -245,11 +245,10 @@ int plugin_get_metadata(
245245
grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX],
246246
size_t *num_creds_md, grpc_status_code *status,
247247
const char **error_details) {
248+
HandleScope scope;
248249
plugin_state *p_state = reinterpret_cast<plugin_state *>(state);
249-
plugin_callback_data *data = new plugin_callback_data;
250-
data->service_url = context.service_url;
251-
data->cb = cb;
252-
data->user_data = user_data;
250+
plugin_callback_data *data =
251+
new plugin_callback_data(context.service_url, cb, user_data);
253252

254253
uv_mutex_lock(&p_state->plugin_mutex);
255254
p_state->pending_callbacks->push(data);

packages/grpc-native-core/ext/call_credentials.h

+15
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,24 @@ class CallCredentials : public Nan::ObjectWrap {
6262
/* Auth metadata plugin functionality */
6363

6464
typedef struct plugin_callback_data {
65+
plugin_callback_data(const char *service_url_,
66+
grpc_credentials_plugin_metadata_cb cb_,
67+
void *user_data_)
68+
: service_url(service_url_),
69+
cb(cb_),
70+
user_data(user_data_),
71+
async_resource(NULL) {
72+
Nan::HandleScope scope;
73+
async_resource = new Nan::AsyncResource("grpc:plugin_callback_data");
74+
}
75+
~plugin_callback_data() {
76+
delete async_resource;
77+
}
78+
6579
const char *service_url;
6680
grpc_credentials_plugin_metadata_cb cb;
6781
void *user_data;
82+
Nan::AsyncResource *async_resource;
6883
} plugin_callback_data;
6984

7085
typedef struct plugin_state {

packages/grpc-native-core/ext/node_grpc.cc

+3-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ typedef struct log_args {
5757

5858
typedef struct logger_state {
5959
Nan::Callback *callback;
60+
Nan::AsyncResource *async_resource;
6061
std::queue<log_args *> *pending_args;
6162
uv_mutex_t mutex;
6263
uv_async_t async;
@@ -202,7 +203,7 @@ NAUV_WORK_CB(LogMessagesCallback) {
202203
.ToLocalChecked();
203204
const int argc = 5;
204205
Local<Value> argv[argc] = {file, line, severity, message, timestamp};
205-
grpc_logger_state.callback->Call(argc, argv);
206+
grpc_logger_state.callback->Call(argc, argv, grpc_logger_state.async_resource);
206207
delete[] arg->core_args.message;
207208
delete arg;
208209
}
@@ -252,6 +253,7 @@ NAN_METHOD(SetDefaultLoggerCallback) {
252253
grpc_logger_state.logger_set = true;
253254
}
254255
grpc_logger_state.callback = new Nan::Callback(info[0].As<v8::Function>());
256+
grpc_logger_state.async_resource = new Nan::AsyncResource("grpc:logger");
255257
}
256258

257259
NAN_METHOD(SetLogVerbosity) {

packages/grpc-native-core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
],
3030
"dependencies": {
3131
"lodash": "^4.15.0",
32-
"nan": "^2.0.0",
32+
"nan": "^2.10.0",
3333
"node-pre-gyp": "0.7.0",
3434
"protobufjs": "^5.0.0"
3535
},

0 commit comments

Comments
 (0)