[wasm] De-flake deserializer test
The NativeModule that was serialized in another isolate might be temporarily kept alive by background threads. By keeping a weak pointer to the module, we can wait for it to really die. This happens very rarely, and the module will die pretty quickly, so busy-waiting is fine in this case. R=thibaudm@chromium.org Bug: v8:10148 Change-Id: I8c4645acfccd04a820ef3f694cad3eb15e75acb6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2016585 Reviewed-by: Thibaud Michaud <thibaudm@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#65942}
This commit is contained in:
parent
e15f5ba11e
commit
6639d47734
@ -127,6 +127,9 @@ class WasmSerializationTest {
|
||||
Isolate* serialization_isolate =
|
||||
reinterpret_cast<Isolate*>(serialization_v8_isolate);
|
||||
ErrorThrower thrower(serialization_isolate, "");
|
||||
// Keep a weak pointer so we can check that the native module dies after
|
||||
// serialization (when the isolate is disposed).
|
||||
std::weak_ptr<NativeModule> weak_native_module;
|
||||
{
|
||||
HandleScope scope(serialization_isolate);
|
||||
v8::Local<v8::Context> serialization_context =
|
||||
@ -140,6 +143,9 @@ class WasmSerializationTest {
|
||||
ModuleWireBytes(buffer.begin(), buffer.end()));
|
||||
Handle<WasmModuleObject> module_object =
|
||||
maybe_module_object.ToHandleChecked();
|
||||
weak_native_module = module_object->shared_native_module();
|
||||
// Check that the native module exists at this point.
|
||||
CHECK(weak_native_module.lock());
|
||||
|
||||
v8::Local<v8::Object> v8_module_obj =
|
||||
v8::Utils::ToLocal(Handle<JSObject>::cast(module_object));
|
||||
@ -162,6 +168,12 @@ class WasmSerializationTest {
|
||||
// and forces de-serialization in the new isolate.
|
||||
serialization_v8_isolate->Dispose();
|
||||
|
||||
// Busy-wait for the NativeModule to really die. Background threads might
|
||||
// temporarily keep it alive (happens very rarely, see
|
||||
// https://crbug.com/v8/10148).
|
||||
while (weak_native_module.lock()) {
|
||||
}
|
||||
|
||||
serialized_bytes_ = {data_.buffer.get(), data_.size};
|
||||
|
||||
v8::HandleScope new_scope(CcTest::isolate());
|
||||
|
Loading…
Reference in New Issue
Block a user