Skip to content

Commit 6a79eaf

Browse files
committedMar 15, 2018
fix: propagate async context
Starting with Nan 2.9.0, we have the ability to propagate async context across async hops. Certain variants of Nan::Callback::Call are now deprecated to encourage context preserving. Here's a simple patch that fixes the deprecation warnings and properly propagates the async context across the async APIs exposed by this module. For more information see [1], [2]. [1]: https://github.com/nodejs/nan/blob/HEAD/doc/node_misc.md#nanasyncresource. [2]: https://nodejs.org/dist/latest-v9.x/docs/api/async_hooks.html#async_hooks_javascript_embedder_api
1 parent 88590ea commit 6a79eaf

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed
 

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"install": "node-pre-gyp install --fallback-to-build"
3030
},
3131
"dependencies": {
32-
"nan": "2.8.0",
32+
"nan": "2.9.2",
3333
"node-pre-gyp": "0.7.0"
3434
},
3535
"devDependencies": {

‎src/bcrypt_node.cc

+9-6
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ bool ValidateSalt(const char* salt) {
6666
class SaltAsyncWorker : public Nan::AsyncWorker {
6767
public:
6868
SaltAsyncWorker(Nan::Callback *callback, std::string seed, ssize_t rounds)
69-
: Nan::AsyncWorker(callback), seed(seed), rounds(rounds) {
69+
: Nan::AsyncWorker(callback, "bcrypt:SaltAsyncWorker"), seed(seed),
70+
rounds(rounds) {
7071
}
7172

7273
~SaltAsyncWorker() {}
@@ -83,7 +84,7 @@ class SaltAsyncWorker : public Nan::AsyncWorker {
8384
Local<Value> argv[2];
8485
argv[0] = Nan::Undefined();
8586
argv[1] = Nan::Encode(salt.c_str(), salt.size(), Nan::BINARY);
86-
callback->Call(2, argv);
87+
callback->Call(2, argv, async_resource);
8788
}
8889

8990
private:
@@ -142,7 +143,8 @@ NAN_METHOD(GenerateSaltSync) {
142143
class EncryptAsyncWorker : public Nan::AsyncWorker {
143144
public:
144145
EncryptAsyncWorker(Nan::Callback *callback, std::string input, std::string salt)
145-
: Nan::AsyncWorker(callback), input(input), salt(salt) {
146+
: Nan::AsyncWorker(callback, "bcrypt:EncryptAsyncWorker"), input(input),
147+
salt(salt) {
146148
}
147149

148150
~EncryptAsyncWorker() {}
@@ -170,7 +172,7 @@ class EncryptAsyncWorker : public Nan::AsyncWorker {
170172
argv[1] = Nan::Encode(output.c_str(), output.size(), Nan::BINARY);
171173
}
172174

173-
callback->Call(2, argv);
175+
callback->Call(2, argv, async_resource);
174176
}
175177

176178
private:
@@ -249,7 +251,8 @@ NAN_INLINE bool CompareStrings(const char* s1, const char* s2) {
249251
class CompareAsyncWorker : public Nan::AsyncWorker {
250252
public:
251253
CompareAsyncWorker(Nan::Callback *callback, std::string input, std::string encrypted)
252-
: Nan::AsyncWorker(callback), input(input), encrypted(encrypted) {
254+
: Nan::AsyncWorker(callback, "bcrypt:CompareAsyncWorker"), input(input),
255+
encrypted(encrypted) {
253256

254257
result = false;
255258
}
@@ -270,7 +273,7 @@ class CompareAsyncWorker : public Nan::AsyncWorker {
270273
Local<Value> argv[2];
271274
argv[0] = Nan::Undefined();
272275
argv[1] = Nan::New<Boolean>(result);
273-
callback->Call(2, argv);
276+
callback->Call(2, argv, async_resource);
274277
}
275278

276279
private:

0 commit comments

Comments
 (0)
Please sign in to comment.