diff options
author | Anatoli Papirovski <apapirovski@mac.com> | 2018-01-13 16:51:28 -0500 |
---|---|---|
committer | Anatoli Papirovski <apapirovski@mac.com> | 2018-01-18 15:55:59 -0500 |
commit | c1234673bbba1ac6c8425dffb2604ccf647bbfcf (patch) | |
tree | a23f91d29eb1c1209e74c37b2aef8ef8a98b5e76 /src/node_perf.cc | |
parent | 7809f386b03d6f2f570fe41060a7ef6e158f5cdb (diff) | |
download | android-node-v8-c1234673bbba1ac6c8425dffb2604ccf647bbfcf.tar.gz android-node-v8-c1234673bbba1ac6c8425dffb2604ccf647bbfcf.tar.bz2 android-node-v8-c1234673bbba1ac6c8425dffb2604ccf647bbfcf.zip |
timers: allow Immediates to be unrefed
Refactor Immediates handling to allow for them to be unrefed, similar
to setTimeout, but without extra handles.
Document the new `immediate.ref()` and `immediate.unref()` methods.
Add SetImmediateUnref on the C++ side.
PR-URL: https://github.com/nodejs/node/pull/18139
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/node_perf.cc')
-rw-r--r-- | src/node_perf.cc | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/node_perf.cc b/src/node_perf.cc index 97d3a2d995..34e6a35000 100644 --- a/src/node_perf.cc +++ b/src/node_perf.cc @@ -182,9 +182,8 @@ void SetupPerformanceObservers(const FunctionCallbackInfo<Value>& args) { } // Creates a GC Performance Entry and passes it to observers -void PerformanceGCCallback(uv_async_t* handle) { - GCPerformanceEntry* entry = static_cast<GCPerformanceEntry*>(handle->data); - Environment* env = entry->env(); +void PerformanceGCCallback(Environment* env, void* ptr) { + GCPerformanceEntry* entry = static_cast<GCPerformanceEntry*>(ptr); HandleScope scope(env->isolate()); Local<Context> context = env->context(); @@ -201,10 +200,6 @@ void PerformanceGCCallback(uv_async_t* handle) { } delete entry; - auto closeCB = [](uv_handle_t* handle) { - delete reinterpret_cast<uv_async_t*>(handle); - }; - uv_close(reinterpret_cast<uv_handle_t*>(handle), closeCB); } // Marks the start of a GC cycle @@ -221,16 +216,13 @@ void MarkGarbageCollectionEnd(Isolate* isolate, v8::GCCallbackFlags flags, void* data) { Environment* env = static_cast<Environment*>(data); - uv_async_t* async = new uv_async_t(); - if (uv_async_init(env->event_loop(), async, PerformanceGCCallback)) - return delete async; - uv_unref(reinterpret_cast<uv_handle_t*>(async)); - async->data = + GCPerformanceEntry* entry = new GCPerformanceEntry(env, static_cast<PerformanceGCKind>(type), performance_last_gc_start_mark_, PERFORMANCE_NOW()); - CHECK_EQ(0, uv_async_send(async)); + env->SetUnrefImmediate(PerformanceGCCallback, + entry); } |