From 8e6706ea95c81534357c84237f561a0a8073c38e Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sat, 23 Aug 2014 00:33:04 +0200 Subject: [PATCH] src: update and expand comments in base-object.h It's safe to call BaseObject::object() from your destructor _unless_ the handle is weak; then it's the weak callback that is calling your destructor and the object will have been released by the time the destructor runs. Reviewed-by: Trevor Norris --- src/base-object.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/base-object.h b/src/base-object.h index 3a18a4fde4e..0e0df3e938b 100644 --- a/src/base-object.h +++ b/src/base-object.h @@ -32,10 +32,15 @@ class BaseObject { BaseObject(Environment* env, v8::Local handle); ~BaseObject(); - // Returns the wrapped object. Illegal to call in your destructor. + // Returns the wrapped object. Returns an empty handle when + // persistent.IsEmpty() is true. inline v8::Local object(); - // Parent class is responsible to Dispose. + // The parent class is responsible for calling .Reset() on destruction + // when the persistent handle is strong because there is no way for + // BaseObject to know when the handle goes out of scope. + // Weak handles have been reset by the time the destructor runs but + // calling .Reset() again is harmless. inline v8::Persistent& persistent(); inline Environment* env() const;