Provide AsyncResource

This commit is contained in:
Petr Zahradnik
2020-01-24 17:22:23 +01:00
committed by petrzjunior
parent 0f3ff2c20a
commit f300d5e0a6
4 changed files with 19 additions and 14 deletions

View File

@@ -6,6 +6,8 @@ using namespace node;
Nan::Persistent<Function> CardReader::constructor;
Nan::AsyncResource *CardReader::async_resource = new Nan::AsyncResource("CardReader_StaticAsyncResource");
void CardReader::init(Local<Object> target) {
// Prepare constructor template
@@ -355,14 +357,14 @@ void CardReader::HandleReaderStatusChange(uv_async_t *handle, int status) {
Nan::CopyBuffer(reinterpret_cast<char*>(ar->atr), ar->atrlen).ToLocalChecked()
};
Nan::Callback(Nan::New(async_baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(async_baton->callback)).Call(argc, argv, async_resource);
}
} else {
Local<Value> err = Nan::Error(error_msg("SCardGetStatusChange", ar->result).c_str());
// Prepare the parameters for the callback function.
const unsigned int argc = 1;
Local<Value> argv[argc] = { err };
Nan::Callback(Nan::New(async_baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(async_baton->callback)).Call(argc, argv, async_resource);
}
if (ar->do_exit) {
@@ -372,8 +374,7 @@ void CardReader::HandleReaderStatusChange(uv_async_t *handle, int status) {
Local<Value> argv[1] = {
Nan::New("_end").ToLocalChecked(), // event name
};
Nan::MakeCallback(async_baton->reader->handle(), "emit", 1, argv);
async_resource->runInAsyncScope(async_baton->reader->handle(), "emit", 1, argv);
}
if (reader->m_status_thread) {
@@ -476,7 +477,7 @@ void CardReader::AfterConnect(uv_work_t* req, int status) {
// Prepare the parameters for the callback function.
const unsigned argc = 1;
Local<Value> argv[argc] = { err };
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
} else {
Nan::Set(baton->reader->handle(), Nan::New(connected_symbol), Nan::True());
const unsigned argc = 2;
@@ -485,7 +486,7 @@ void CardReader::AfterConnect(uv_work_t* req, int status) {
Nan::New<Number>(cr->card_protocol)
};
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
}
// The callback is a permanent handle, so we have to dispose of it manually.
@@ -531,7 +532,7 @@ void CardReader::AfterDisconnect(uv_work_t* req, int status) {
// Prepare the parameters for the callback function.
const unsigned argc = 1;
Local<Value> argv[argc] = { err };
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
} else {
Nan::Set(baton->reader->handle(), Nan::New(connected_symbol), Nan::False());
const unsigned argc = 1;
@@ -539,7 +540,7 @@ void CardReader::AfterDisconnect(uv_work_t* req, int status) {
Nan::Null()
};
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
}
// The callback is a permanent handle, so we have to dispose of it manually.
@@ -592,7 +593,7 @@ void CardReader::AfterTransmit(uv_work_t* req, int status) {
// Prepare the parameters for the callback function.
const unsigned argc = 1;
Local<Value> argv[argc] = { err };
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
} else {
const unsigned argc = 2;
Local<Value> argv[argc] = {
@@ -600,7 +601,7 @@ void CardReader::AfterTransmit(uv_work_t* req, int status) {
Nan::CopyBuffer(reinterpret_cast<char*>(tr->data), tr->len).ToLocalChecked()
};
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
}
@@ -656,7 +657,7 @@ void CardReader::AfterControl(uv_work_t* req, int status) {
// Prepare the parameters for the callback function.
const unsigned argc = 1;
Local<Value> argv[argc] = { err };
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
} else {
const unsigned argc = 2;
Local<Value> argv[argc] = {
@@ -664,7 +665,7 @@ void CardReader::AfterControl(uv_work_t* req, int status) {
Nan::New<Number>(cr->len)
};
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(baton->callback)).Call(argc, argv, async_resource);
}

View File

@@ -132,6 +132,7 @@ class CardReader: public Nan::ObjectWrap {
uv_mutex_t m_mutex;
uv_cond_t m_cond;
int m_state;
static Nan::AsyncResource *async_resource;
};
#endif /* CARDREADER_H */

View File

@@ -6,6 +6,8 @@ using namespace node;
Nan::Persistent<Function> PCSCLite::constructor;
Nan::AsyncResource *PCSCLite::async_resource = new Nan::AsyncResource("PCSCLite_StaticAsyncResource");
void PCSCLite::init(Local<Object> target) {
// Prepare constructor template
@@ -181,10 +183,10 @@ void PCSCLite::HandleReaderStatusChange(uv_async_t *handle, int status) {
Nan::CopyBuffer(ar->readers_name, ar->readers_name_length).ToLocalChecked()
};
Nan::Callback(Nan::New(async_baton->callback)).Call(argc, argv);
Nan::Callback(Nan::New(async_baton->callback)).Call(argc, argv, async_resource);
} else {
Local<Value> argv[1] = { Nan::Error(ar->err_msg.c_str()) };
Nan::Callback(Nan::New(async_baton->callback)).Call(1, argv);
Nan::Callback(Nan::New(async_baton->callback)).Call(1, argv, async_resource);
}
// Do exit, after throwing last events

View File

@@ -56,6 +56,7 @@ class PCSCLite: public Nan::ObjectWrap {
uv_cond_t m_cond;
bool m_pnp;
int m_state;
static Nan::AsyncResource *async_resource;
};
#endif /* PCSCLITE_H */