Chromium Code Reviews| 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); |
| } |