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

Unified Diff: src/wasm/wasm-js.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
« no previous file with comments | « no previous file | src/wasm/wasm-module.cc » ('j') | src/wasm/wasm-module.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/wasm-js.cc
diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc
index 20c6d9bb69910cb15ae93ccad99dc0b3a21b5be4..cbd2c321dced2969aa17db81f16fa506d1674e7b 100644
--- a/src/wasm/wasm-js.cc
+++ b/src/wasm/wasm-js.cc
@@ -732,6 +732,30 @@ void WebAssemblyMemoryGrow(const v8::FunctionCallbackInfo<v8::Value>& args) {
isolate->ThrowException(e);
return;
}
+
+ if (delta_size != 0) {
titzer 2017/01/25 09:28:57 There was a discussion about whether a delta_size
gdeepti 2017/01/25 21:05:24 I opened that issue because I was not able to get
+ // Detach the old buffer
+ const bool has_guard_regions =
titzer 2017/01/25 09:28:56 I think it also makes sense to move the detachment
gdeepti 2017/01/25 21:05:24 Done.
+ (!old_buffer.is_null() && old_buffer->has_guard_region()) ? true
+ : false;
Eric Holk 2017/01/25 18:16:57 nit: Is the ? operator needed here? `(!old_buffer.
gdeepti 2017/01/25 18:59:19 Done.
+ DCHECK(!old_buffer->is_neuterable());
+ void* backing_store = old_buffer->backing_store();
Eric Holk 2017/01/25 18:16:57 It might not hurt to add `DCHECK(backing_store !=
gdeepti 2017/01/25 18:59:19 Done.
+ int64_t byte_length = NumberToSize(old_buffer->byte_length());
+ old_buffer->set_is_neuterable(true);
+ if (!has_guard_regions) {
+ old_buffer->set_is_external(true);
+ i_isolate->heap()->UnregisterArrayBuffer(*old_buffer);
+ }
+ old_buffer->Neuter();
+ if (!has_guard_regions) {
+ i_isolate->array_buffer_allocator()->Free(backing_store, byte_length);
+ } else {
+ base::OS::Free(backing_store, RoundUp(i::wasm::kWasmMaxHeapOffset,
+ base::OS::CommitPageSize()));
+ isolate->AdjustAmountOfExternalAllocatedMemory(-byte_length);
+ }
+ }
+
v8::ReturnValue<v8::Value> return_value = args.GetReturnValue();
return_value.Set(ret);
}
« no previous file with comments | « no previous file | src/wasm/wasm-module.cc » ('j') | src/wasm/wasm-module.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698