@@ -477,31 +477,18 @@ static void ELDHistogramNew(const FunctionCallbackInfo<Value>& args) {
477477ELDHistogram::ELDHistogram (
478478 Environment* env,
479479 Local<Object> wrap,
480- int32_t resolution) : BaseObject(env, wrap),
480+ int32_t resolution) : HandleWrap(env,
481+ wrap,
482+ reinterpret_cast <uv_handle_t *>(&timer_),
483+ AsyncWrap::PROVIDER_ELDHISTOGRAM),
481484 Histogram (1 , 3.6e12 ),
482485 resolution_(resolution) {
483486 MakeWeak ();
484- timer_ = new uv_timer_t ();
485- uv_timer_init (env->event_loop (), timer_);
486- timer_->data = this ;
487+ uv_timer_init (env->event_loop (), &timer_);
487488}
488489
489- void ELDHistogram::CloseTimer () {
490- if (timer_ == nullptr )
491- return ;
492-
493- env ()->CloseHandle (timer_, [](uv_timer_t * handle) { delete handle; });
494- timer_ = nullptr ;
495- }
496-
497- ELDHistogram::~ELDHistogram () {
498- Disable ();
499- CloseTimer ();
500- }
501-
502- void ELDHistogramDelayInterval (uv_timer_t * req) {
503- ELDHistogram* histogram =
504- reinterpret_cast <ELDHistogram*>(req->data );
490+ void ELDHistogram::DelayIntervalCallback (uv_timer_t * req) {
491+ ELDHistogram* histogram = ContainerOf (&ELDHistogram::timer_, req);
505492 histogram->RecordDelta ();
506493 TRACE_COUNTER1 (TRACING_CATEGORY_NODE2 (perf, event_loop),
507494 " min" , histogram->Min ());
@@ -537,21 +524,21 @@ bool ELDHistogram::RecordDelta() {
537524}
538525
539526bool ELDHistogram::Enable () {
540- if (enabled_) return false ;
527+ if (enabled_ || IsHandleClosing () ) return false ;
541528 enabled_ = true ;
542529 prev_ = 0 ;
543- uv_timer_start (timer_,
544- ELDHistogramDelayInterval ,
530+ uv_timer_start (& timer_,
531+ DelayIntervalCallback ,
545532 resolution_,
546533 resolution_);
547- uv_unref (reinterpret_cast <uv_handle_t *>(timer_));
534+ uv_unref (reinterpret_cast <uv_handle_t *>(& timer_));
548535 return true ;
549536}
550537
551538bool ELDHistogram::Disable () {
552- if (!enabled_) return false ;
539+ if (!enabled_ || IsHandleClosing () ) return false ;
553540 enabled_ = false ;
554- uv_timer_stop (timer_);
541+ uv_timer_stop (& timer_);
555542 return true ;
556543}
557544
0 commit comments