From 77fa310949cf926bf7befffff32616cb1ba1c41b Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 27 Jan 2019 14:21:51 +0100 Subject: src: pass along errors from perf obj instantiation PR-URL: https://github.com/nodejs/node/pull/25734 Reviewed-By: James M Snell Reviewed-By: Gus Caplan --- src/node_perf.cc | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'src/node_perf.cc') diff --git a/src/node_perf.cc b/src/node_perf.cc index b3bbc16a3e..9c0091d2bc 100644 --- a/src/node_perf.cc +++ b/src/node_perf.cc @@ -20,6 +20,7 @@ using v8::HandleScope; using v8::Integer; using v8::Isolate; using v8::Local; +using v8::MaybeLocal; using v8::Name; using v8::NewStringType; using v8::Number; @@ -102,10 +103,13 @@ inline void InitObject(const PerformanceEntry& entry, Local obj) { } // Create a new PerformanceEntry object -const Local PerformanceEntry::ToObject() const { - Local obj = - env_->performance_entry_template() - ->NewInstance(env_->context()).ToLocalChecked(); +MaybeLocal PerformanceEntry::ToObject() const { + Local obj; + if (!env_->performance_entry_template() + ->NewInstance(env_->context()) + .ToLocal(&obj)) { + return MaybeLocal(); + } InitObject(*this, obj); return obj; } @@ -154,7 +158,8 @@ void Mark(const FunctionCallbackInfo& args) { *name, now / 1000); PerformanceEntry entry(env, *name, "mark", now, now); - Local obj = entry.ToObject(); + Local obj; + if (!entry.ToObject().ToLocal(&obj)) return; PerformanceEntry::Notify(env, entry.kind(), obj); args.GetReturnValue().Set(obj); } @@ -217,7 +222,8 @@ void Measure(const FunctionCallbackInfo& args) { *name, *name, endTimestamp / 1000); PerformanceEntry entry(env, *name, "measure", startTimestamp, endTimestamp); - Local obj = entry.ToObject(); + Local obj; + if (!entry.ToObject().ToLocal(&obj)) return; PerformanceEntry::Notify(env, entry.kind(), obj); args.GetReturnValue().Set(obj); } @@ -242,14 +248,16 @@ void SetupPerformanceObservers(const FunctionCallbackInfo& args) { // Creates a GC Performance Entry and passes it to observers void PerformanceGCCallback(Environment* env, void* ptr) { - GCPerformanceEntry* entry = static_cast(ptr); + std::unique_ptr entry{ + static_cast(ptr)}; HandleScope scope(env->isolate()); Local context = env->context(); AliasedBuffer& observers = env->performance_state()->observers; if (observers[NODE_PERFORMANCE_ENTRY_TYPE_GC]) { - Local obj = entry->ToObject(); + Local obj; + if (!entry->ToObject().ToLocal(&obj)) return; PropertyAttribute attr = static_cast(ReadOnly | DontDelete); obj->DefineOwnProperty(context, @@ -258,8 +266,6 @@ void PerformanceGCCallback(Environment* env, void* ptr) { attr).FromJust(); PerformanceEntry::Notify(env, entry->kind(), obj); } - - delete entry; } // Marks the start of a GC cycle @@ -359,7 +365,8 @@ void TimerFunctionCall(const FunctionCallbackInfo& args) { return; PerformanceEntry entry(env, *name, "function", start, end); - Local obj = entry.ToObject(); + Local obj; + if (!entry.ToObject().ToLocal(&obj)) return; for (idx = 0; idx < count; idx++) obj->Set(context, idx, args[idx]).FromJust(); PerformanceEntry::Notify(env, entry.kind(), obj); -- cgit v1.2.3