@@ -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" 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