Provide AsyncResource
This commit is contained in:
committed by
petrzjunior
parent
0f3ff2c20a
commit
f300d5e0a6
@@ -6,6 +6,8 @@ using namespace node;
|
|||||||
|
|
||||||
Nan::Persistent<Function> CardReader::constructor;
|
Nan::Persistent<Function> CardReader::constructor;
|
||||||
|
|
||||||
|
Nan::AsyncResource *CardReader::async_resource = new Nan::AsyncResource("CardReader_StaticAsyncResource");
|
||||||
|
|
||||||
void CardReader::init(Local<Object> target) {
|
void CardReader::init(Local<Object> target) {
|
||||||
|
|
||||||
// Prepare constructor template
|
// 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::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 {
|
} else {
|
||||||
Local<Value> err = Nan::Error(error_msg("SCardGetStatusChange", ar->result).c_str());
|
Local<Value> err = Nan::Error(error_msg("SCardGetStatusChange", ar->result).c_str());
|
||||||
// Prepare the parameters for the callback function.
|
// Prepare the parameters for the callback function.
|
||||||
const unsigned int argc = 1;
|
const unsigned int argc = 1;
|
||||||
Local<Value> argv[argc] = { err };
|
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) {
|
if (ar->do_exit) {
|
||||||
@@ -372,8 +374,7 @@ void CardReader::HandleReaderStatusChange(uv_async_t *handle, int status) {
|
|||||||
Local<Value> argv[1] = {
|
Local<Value> argv[1] = {
|
||||||
Nan::New("_end").ToLocalChecked(), // event name
|
Nan::New("_end").ToLocalChecked(), // event name
|
||||||
};
|
};
|
||||||
|
async_resource->runInAsyncScope(async_baton->reader->handle(), "emit", 1, argv);
|
||||||
Nan::MakeCallback(async_baton->reader->handle(), "emit", 1, argv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reader->m_status_thread) {
|
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.
|
// Prepare the parameters for the callback function.
|
||||||
const unsigned argc = 1;
|
const unsigned argc = 1;
|
||||||
Local<Value> argv[argc] = { err };
|
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 {
|
} else {
|
||||||
Nan::Set(baton->reader->handle(), Nan::New(connected_symbol), Nan::True());
|
Nan::Set(baton->reader->handle(), Nan::New(connected_symbol), Nan::True());
|
||||||
const unsigned argc = 2;
|
const unsigned argc = 2;
|
||||||
@@ -485,7 +486,7 @@ void CardReader::AfterConnect(uv_work_t* req, int status) {
|
|||||||
Nan::New<Number>(cr->card_protocol)
|
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.
|
// 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.
|
// Prepare the parameters for the callback function.
|
||||||
const unsigned argc = 1;
|
const unsigned argc = 1;
|
||||||
Local<Value> argv[argc] = { err };
|
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 {
|
} else {
|
||||||
Nan::Set(baton->reader->handle(), Nan::New(connected_symbol), Nan::False());
|
Nan::Set(baton->reader->handle(), Nan::New(connected_symbol), Nan::False());
|
||||||
const unsigned argc = 1;
|
const unsigned argc = 1;
|
||||||
@@ -539,7 +540,7 @@ void CardReader::AfterDisconnect(uv_work_t* req, int status) {
|
|||||||
Nan::Null()
|
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.
|
// 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.
|
// Prepare the parameters for the callback function.
|
||||||
const unsigned argc = 1;
|
const unsigned argc = 1;
|
||||||
Local<Value> argv[argc] = { err };
|
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 {
|
} else {
|
||||||
const unsigned argc = 2;
|
const unsigned argc = 2;
|
||||||
Local<Value> argv[argc] = {
|
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::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.
|
// Prepare the parameters for the callback function.
|
||||||
const unsigned argc = 1;
|
const unsigned argc = 1;
|
||||||
Local<Value> argv[argc] = { err };
|
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 {
|
} else {
|
||||||
const unsigned argc = 2;
|
const unsigned argc = 2;
|
||||||
Local<Value> argv[argc] = {
|
Local<Value> argv[argc] = {
|
||||||
@@ -664,7 +665,7 @@ void CardReader::AfterControl(uv_work_t* req, int status) {
|
|||||||
Nan::New<Number>(cr->len)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ class CardReader: public Nan::ObjectWrap {
|
|||||||
uv_mutex_t m_mutex;
|
uv_mutex_t m_mutex;
|
||||||
uv_cond_t m_cond;
|
uv_cond_t m_cond;
|
||||||
int m_state;
|
int m_state;
|
||||||
|
static Nan::AsyncResource *async_resource;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CARDREADER_H */
|
#endif /* CARDREADER_H */
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ using namespace node;
|
|||||||
|
|
||||||
Nan::Persistent<Function> PCSCLite::constructor;
|
Nan::Persistent<Function> PCSCLite::constructor;
|
||||||
|
|
||||||
|
Nan::AsyncResource *PCSCLite::async_resource = new Nan::AsyncResource("PCSCLite_StaticAsyncResource");
|
||||||
|
|
||||||
void PCSCLite::init(Local<Object> target) {
|
void PCSCLite::init(Local<Object> target) {
|
||||||
|
|
||||||
// Prepare constructor template
|
// 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::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 {
|
} else {
|
||||||
Local<Value> argv[1] = { Nan::Error(ar->err_msg.c_str()) };
|
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
|
// Do exit, after throwing last events
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class PCSCLite: public Nan::ObjectWrap {
|
|||||||
uv_cond_t m_cond;
|
uv_cond_t m_cond;
|
||||||
bool m_pnp;
|
bool m_pnp;
|
||||||
int m_state;
|
int m_state;
|
||||||
|
static Nan::AsyncResource *async_resource;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PCSCLITE_H */
|
#endif /* PCSCLITE_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user