Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: src/wasm/wasm-objects.cc

Issue 2867233002: [wasm] Do not unregister an ArrayBuffer if it is already external (Closed)
Patch Set: Eric's review Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/wasm/wasm-module.cc ('k') | test/cctest/wasm/test-run-wasm-module.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/wasm/wasm-objects.h" 5 #include "src/wasm/wasm-objects.h"
6 #include "src/utils.h" 6 #include "src/utils.h"
7 7
8 #include "src/assembler-inl.h" 8 #include "src/assembler-inl.h"
9 #include "src/base/iterator.h" 9 #include "src/base/iterator.h"
10 #include "src/compiler/wasm-compiler.h" 10 #include "src/compiler/wasm-compiler.h"
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 uint32_t old_size = 0; 469 uint32_t old_size = 0;
470 Address old_mem_start = nullptr; 470 Address old_mem_start = nullptr;
471 if (memory_object->has_buffer()) { 471 if (memory_object->has_buffer()) {
472 old_buffer = handle(memory_object->buffer()); 472 old_buffer = handle(memory_object->buffer());
473 old_size = old_buffer->byte_length()->Number(); 473 old_size = old_buffer->byte_length()->Number();
474 old_mem_start = static_cast<Address>(old_buffer->backing_store()); 474 old_mem_start = static_cast<Address>(old_buffer->backing_store());
475 } 475 }
476 Handle<JSArrayBuffer> new_buffer; 476 Handle<JSArrayBuffer> new_buffer;
477 // Return current size if grow by 0. 477 // Return current size if grow by 0.
478 if (pages == 0) { 478 if (pages == 0) {
479 // Even for pages == 0, we need to attach a new JSArrayBuffer and neuter the 479 // Even for pages == 0, we need to attach a new JSArrayBuffer with the same
480 // old one to be spec compliant. 480 // backing store and neuter the old one to be spec compliant.
481 if (!old_buffer.is_null() && old_buffer->backing_store() != nullptr) { 481 if (!old_buffer.is_null() && old_size != 0) {
482 new_buffer = SetupArrayBuffer(isolate, old_buffer->backing_store(), 482 new_buffer = SetupArrayBuffer(isolate, old_buffer->backing_store(),
483 old_size, old_buffer->is_external(), 483 old_size, old_buffer->is_external(),
484 old_buffer->has_guard_region()); 484 old_buffer->has_guard_region());
485 memory_object->set_buffer(*new_buffer); 485 memory_object->set_buffer(*new_buffer);
486 old_buffer->set_is_neuterable(true);
487 if (!old_buffer->has_guard_region()) {
488 old_buffer->set_is_external(true);
489 isolate->heap()->UnregisterArrayBuffer(*old_buffer);
490 }
491 // Neuter but don't free the memory because it is now being used by
492 // new_buffer.
493 old_buffer->Neuter();
494 } 486 }
495 DCHECK_EQ(0, old_size % WasmModule::kPageSize); 487 DCHECK_EQ(0, old_size % WasmModule::kPageSize);
496 return old_size / WasmModule::kPageSize; 488 return old_size / WasmModule::kPageSize;
497 } 489 }
498 if (!memory_object->has_instances_link()) { 490 if (!memory_object->has_instances_link()) {
499 // Memory object does not have an instance associated with it, just grow 491 // Memory object does not have an instance associated with it, just grow
500 uint32_t max_pages; 492 uint32_t max_pages;
501 if (memory_object->has_maximum_pages()) { 493 if (memory_object->has_maximum_pages()) {
502 max_pages = static_cast<uint32_t>(memory_object->maximum_pages()); 494 max_pages = static_cast<uint32_t>(memory_object->maximum_pages());
503 if (FLAG_wasm_max_mem_pages < max_pages) return -1; 495 if (FLAG_wasm_max_mem_pages < max_pages) return -1;
(...skipping 1081 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 if (!array->get(kWrapperInstanceObject)->IsWeakCell()) return false; 1577 if (!array->get(kWrapperInstanceObject)->IsWeakCell()) return false;
1586 Isolate* isolate = array->GetIsolate(); 1578 Isolate* isolate = array->GetIsolate();
1587 if (!array->get(kNextInstanceWrapper)->IsUndefined(isolate) && 1579 if (!array->get(kNextInstanceWrapper)->IsUndefined(isolate) &&
1588 !array->get(kNextInstanceWrapper)->IsFixedArray()) 1580 !array->get(kNextInstanceWrapper)->IsFixedArray())
1589 return false; 1581 return false;
1590 if (!array->get(kPreviousInstanceWrapper)->IsUndefined(isolate) && 1582 if (!array->get(kPreviousInstanceWrapper)->IsUndefined(isolate) &&
1591 !array->get(kPreviousInstanceWrapper)->IsFixedArray()) 1583 !array->get(kPreviousInstanceWrapper)->IsFixedArray())
1592 return false; 1584 return false;
1593 return true; 1585 return true;
1594 } 1586 }
OLDNEW
« no previous file with comments | « src/wasm/wasm-module.cc ('k') | test/cctest/wasm/test-run-wasm-module.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698