summaryrefslogtreecommitdiff
path: root/src/node_perf.cc
diff options
context:
space:
mode:
authorAnatoli Papirovski <apapirovski@mac.com>2018-01-13 16:51:28 -0500
committerAnatoli Papirovski <apapirovski@mac.com>2018-01-18 15:55:59 -0500
commitc1234673bbba1ac6c8425dffb2604ccf647bbfcf (patch)
treea23f91d29eb1c1209e74c37b2aef8ef8a98b5e76 /src/node_perf.cc
parent7809f386b03d6f2f570fe41060a7ef6e158f5cdb (diff)
downloadandroid-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.cc18
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);
}