@@ -84,7 +84,7 @@ using v8::Value;
8484
8585namespace {
8686
87- class CallbackInfo {
87+ class CallbackInfo : public Cleanable {
8888 public:
8989 static inline Local<ArrayBuffer> CreateTrackedArrayBuffer (
9090 Environment* env,
@@ -95,9 +95,9 @@ class CallbackInfo {
9595
9696 CallbackInfo (const CallbackInfo&) = delete ;
9797 CallbackInfo& operator =(const CallbackInfo&) = delete ;
98+ void Clean ();
9899
99100 private:
100- static void CleanupHook (void * data);
101101 inline void OnBackingStoreFree ();
102102 inline void CallAndResetCallback ();
103103 inline CallbackInfo (Environment* env,
@@ -112,7 +112,6 @@ class CallbackInfo {
112112 Environment* const env_;
113113};
114114
115-
116115Local<ArrayBuffer> CallbackInfo::CreateTrackedArrayBuffer (
117116 Environment* env,
118117 char * data,
@@ -152,25 +151,23 @@ CallbackInfo::CallbackInfo(Environment* env,
152151 data_ (data),
153152 hint_(hint),
154153 env_(env) {
155- env->AddCleanupHook (CleanupHook, this );
154+ env->AddCleanable ( this );
156155 env->isolate ()->AdjustAmountOfExternalAllocatedMemory (sizeof (*this ));
157156}
158157
159- void CallbackInfo::CleanupHook (void * data) {
160- CallbackInfo* self = static_cast <CallbackInfo*>(data);
161-
158+ void CallbackInfo::Clean () {
162159 {
163- HandleScope handle_scope (self-> env_ ->isolate ());
164- Local<ArrayBuffer> ab = self-> persistent_ .Get (self-> env_ ->isolate ());
160+ HandleScope handle_scope (env_->isolate ());
161+ Local<ArrayBuffer> ab = persistent_.Get (env_->isolate ());
165162 if (!ab.IsEmpty () && ab->IsDetachable ()) {
166163 ab->Detach (Local<Value>()).Check ();
167- self-> persistent_ .Reset ();
164+ persistent_.Reset ();
168165 }
169166 }
170167
171168 // Call the callback in this case, but don't delete `this` yet because the
172169 // BackingStore deleter callback will do so later.
173- self-> CallAndResetCallback ();
170+ CallAndResetCallback ();
174171}
175172
176173void CallbackInfo::CallAndResetCallback () {
@@ -182,7 +179,7 @@ void CallbackInfo::CallAndResetCallback() {
182179 }
183180 if (callback != nullptr ) {
184181 // Clean up all Environment-related state and run the callback.
185- env_->RemoveCleanupHook (CleanupHook, this );
182+ env_->RemoveCleanable ( this );
186183 int64_t change_in_bytes = -static_cast <int64_t >(sizeof (*this ));
187184 env_->isolate ()->AdjustAmountOfExternalAllocatedMemory (change_in_bytes);
188185
0 commit comments