GeezerVison is showing github.com — buffer,n-api: fix double ArrayBuffer::Detach() during cleanup · nodejs/node@39a3cc1
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: src/js_native_api_v8.cc +6-4Lines changed: 6 additions & 4 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -392,10 +392,12 @@ class ArrayBufferReference final : public Reference { |
392 | 392 | inline void Finalize(bool is_env_teardown) override { |
393 | 393 | if (is_env_teardown) { |
394 | 394 | v8::HandleScope handle_scope(_env->isolate); |
395 | | - v8::Local<v8::Value> ab = Get(); |
396 | | - CHECK(!ab.IsEmpty()); |
397 | | - CHECK(ab->IsArrayBuffer()); |
398 | | - ab.As<v8::ArrayBuffer>()->Detach(); |
| 395 | + v8::Local<v8::Value> obj = Get(); |
| 396 | + CHECK(!obj.IsEmpty()); |
| 397 | + CHECK(obj->IsArrayBuffer()); |
| 398 | + v8::Local<v8::ArrayBuffer> ab = obj.As<v8::ArrayBuffer>(); |
| 399 | + if (ab->IsDetachable()) |
| 400 | + ab->Detach(); |
399 | 401 | } |
400 | 402 |
|
401 | 403 | Reference::Finalize(is_env_teardown); |
|
Collapse file
Copy file name to clipboardExpand all lines: src/node_buffer.cc +2-1Lines changed: 2 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -151,7 +151,8 @@ void CallbackInfo::CleanupHook(void* data) { |
151 | 151 | HandleScope handle_scope(self->env_->isolate()); |
152 | 152 | Local<ArrayBuffer> ab = self->persistent_.Get(self->env_->isolate()); |
153 | 153 | CHECK(!ab.IsEmpty()); |
154 | | - ab->Detach(); |
| 154 | + if (ab->IsDetachable()) |
| 155 | + ab->Detach(); |
155 | 156 | } |
156 | 157 |
|
157 | 158 | self->WeakCallback(self->env_->isolate()); |
|