aboutsummaryrefslogtreecommitdiff
path: root/src/env.h
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2017-11-21 12:38:27 +0100
committerAnna Henningsen <anna@addaleax.net>2017-11-27 02:00:39 +0100
commit7306a337f6d32cedfbd002484e0b0e8a47f5ad09 (patch)
tree7f9a5fa7d37011051bc7f7ec31c29a4ebeb0b031 /src/env.h
parentbb4462681cd2812d718897ca7ac8b8d48bca68f0 (diff)
downloadandroid-node-v8-7306a337f6d32cedfbd002484e0b0e8a47f5ad09.tar.gz
android-node-v8-7306a337f6d32cedfbd002484e0b0e8a47f5ad09.tar.bz2
android-node-v8-7306a337f6d32cedfbd002484e0b0e8a47f5ad09.zip
src: add optional keep-alive object to SetImmediate
Adds the possibility to keep a strong persistent reference to a JS object while a `SetImmediate()` call is in effect. PR-URL: https://github.com/nodejs/node/pull/17183 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Diffstat (limited to 'src/env.h')
-rw-r--r--src/env.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/env.h b/src/env.h
index f5161b9f8a..1e0175946e 100644
--- a/src/env.h
+++ b/src/env.h
@@ -686,7 +686,11 @@ class Environment {
bool EmitNapiWarning();
typedef void (*native_immediate_callback)(Environment* env, void* data);
- inline void SetImmediate(native_immediate_callback cb, void* data);
+ // cb will be called as cb(env, data) on the next event loop iteration.
+ // obj will be kept alive between now and after the callback has run.
+ inline void SetImmediate(native_immediate_callback cb,
+ void* data,
+ v8::Local<v8::Object> obj = v8::Local<v8::Object>());
// This needs to be available for the JS-land setImmediate().
void ActivateImmediateCheck();
@@ -751,6 +755,7 @@ class Environment {
struct NativeImmediateCallback {
native_immediate_callback cb_;
void* data_;
+ std::unique_ptr<v8::Persistent<v8::Object>> keep_alive_;
};
std::vector<NativeImmediateCallback> native_immediate_callbacks_;
void RunAndClearNativeImmediates();