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

Unified Diff: src/wasm/wasm-module.cc

Issue 2653183003: [wasm] Memory buffer should be detached after Memory.Grow (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: src/wasm/wasm-module.cc
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
index 6eff8f2820848bcac4b38b3ad9727cdb29bde0a8..7446fe30ad3cf17b7053866c78d3b43c4d560046 100644
--- a/src/wasm/wasm-module.cc
+++ b/src/wasm/wasm-module.cc
@@ -61,12 +61,14 @@ static void MemoryFinalizer(const v8::WeakCallbackInfo<void>& data) {
JSArrayBuffer** p = reinterpret_cast<JSArrayBuffer**>(data.GetParameter());
JSArrayBuffer* buffer = *p;
- void* memory = buffer->backing_store();
- base::OS::Free(memory,
- RoundUp(kWasmMaxHeapOffset, base::OS::CommitPageSize()));
+ if (!buffer->was_neutered()) {
+ void* memory = buffer->backing_store();
Eric Holk 2017/01/25 18:16:57 `DCHECK(memory != nullptr)` would probably be good
gdeepti 2017/01/25 18:59:19 Done.
+ base::OS::Free(memory,
+ RoundUp(kWasmMaxHeapOffset, base::OS::CommitPageSize()));
- data.GetIsolate()->AdjustAmountOfExternalAllocatedMemory(
- -buffer->byte_length()->Number());
+ data.GetIsolate()->AdjustAmountOfExternalAllocatedMemory(
+ -buffer->byte_length()->Number());
+ }
GlobalHandles::Destroy(reinterpret_cast<Object**>(p));
}
@@ -2349,25 +2351,14 @@ Handle<JSArrayBuffer> GrowMemoryBuffer(Isolate* isolate,
return Handle<JSArrayBuffer>::null();
}
- Handle<JSArrayBuffer> new_buffer;
- if (!old_buffer.is_null() && old_buffer->has_guard_region()) {
- // We don't move the backing store, we simply change the protection to make
- // more of it accessible.
- base::OS::Unprotect(old_buffer->backing_store(), new_size);
- reinterpret_cast<v8::Isolate*>(isolate)
- ->AdjustAmountOfExternalAllocatedMemory(pages * WasmModule::kPageSize);
- Handle<Object> new_size_object =
- isolate->factory()->NewNumberFromSize(new_size);
- old_buffer->set_byte_length(*new_size_object);
- new_buffer = old_buffer;
- } else {
- const bool enable_guard_regions = false;
- new_buffer = NewArrayBuffer(isolate, new_size, enable_guard_regions);
- if (new_buffer.is_null()) return new_buffer;
- Address new_mem_start = static_cast<Address>(new_buffer->backing_store());
- if (old_size != 0) {
- memcpy(new_mem_start, old_mem_start, old_size);
- }
+ const bool enable_guard_regions =
+ (!old_buffer.is_null() && old_buffer->has_guard_region()) ? true : false;
titzer 2017/01/25 09:28:57 You don't need to do the {x ? true : false}, you c
gdeepti 2017/01/25 21:05:24 Done.
+ Handle<JSArrayBuffer> new_buffer =
+ NewArrayBuffer(isolate, new_size, enable_guard_regions);
titzer 2017/01/25 09:28:57 I think should adjust the old logic here (just cha
gdeepti 2017/01/25 21:05:24 After offline discussions with Eric (summarized he
+ if (new_buffer.is_null()) return new_buffer;
+ Address new_mem_start = static_cast<Address>(new_buffer->backing_store());
+ if (old_size != 0) {
+ memcpy(new_mem_start, old_mem_start, old_size);
}
return new_buffer;
}

Powered by Google App Engine
This is Rietveld 408576698