Make regress-crbug-514081 less flaky by having max serialization size
BUG=v8:5906
R=machenbach@chromium.org
Review-Url: https://codereview.chromium.org/2697723004
Cr-Commit-Position: refs/heads/master@{#43292}
diff --git a/src/d8.cc b/src/d8.cc
index 1f35210..a37eb9f 100644
--- a/src/d8.cc
+++ b/src/d8.cc
@@ -66,6 +66,7 @@
const int MB = 1024 * 1024;
const int kMaxWorkers = 50;
+const int kMaxSerializerMemoryUsage = 1 * MB; // Arbitrary maximum for testing.
#define USE_VM 1
#define VM_THRESHOLD 65536
@@ -2567,7 +2568,9 @@
class Serializer : public ValueSerializer::Delegate {
public:
explicit Serializer(Isolate* isolate)
- : isolate_(isolate), serializer_(isolate, this) {}
+ : isolate_(isolate),
+ serializer_(isolate, this),
+ current_memory_usage_(0) {}
Maybe<bool> WriteValue(Local<Context> context, Local<Value> value,
Local<Value> transfer) {
@@ -2618,6 +2621,11 @@
void* ReallocateBufferMemory(void* old_buffer, size_t size,
size_t* actual_size) override {
+ // Not accurate, because we don't take into account reallocated buffers,
+ // but this is fine for testing.
+ current_memory_usage_ += size;
+ if (current_memory_usage_ > kMaxSerializerMemoryUsage) return nullptr;
+
void* result = realloc(old_buffer, size);
*actual_size = result ? size : 0;
return result;
@@ -2695,6 +2703,7 @@
std::unique_ptr<SerializationData> data_;
std::vector<Global<ArrayBuffer>> array_buffers_;
std::vector<Global<SharedArrayBuffer>> shared_array_buffers_;
+ size_t current_memory_usage_;
DISALLOW_COPY_AND_ASSIGN(Serializer);
};
diff --git a/test/mjsunit/mjsunit.status b/test/mjsunit/mjsunit.status
index 2b014f9..75070c3 100644
--- a/test/mjsunit/mjsunit.status
+++ b/test/mjsunit/mjsunit.status
@@ -172,9 +172,6 @@
# BUG(v8:5807): Flaky data race.
'wasm/embenchen/fannkuch': [PASS, ['tsan', SKIP]],
-
- # BUG(v8:5906).
- 'regress/regress-crbug-514081': [PASS, ['system == linux', SKIP]],
}], # ALWAYS
['novfp3 == True', {
diff --git a/test/mjsunit/regress/regress-crbug-514081.js b/test/mjsunit/regress/regress-crbug-514081.js
index af31f4b..ee3ed81 100644
--- a/test/mjsunit/regress/regress-crbug-514081.js
+++ b/test/mjsunit/regress/regress-crbug-514081.js
@@ -5,16 +5,14 @@
if (this.Worker) {
var __v_7 = new Worker('onmessage = function() {};');
var e;
+ var ab = new ArrayBuffer(2 * 1000 * 1000);
try {
- var ab = new ArrayBuffer(2147483648);
- try {
- __v_7.postMessage(ab);
- } catch (e) {
- // postMessage failed, should be a DataCloneError message.
- assertContains('cloned', e.message);
- }
+ __v_7.postMessage(ab);
+ threw = false;
} catch (e) {
- // Creating the ArrayBuffer failed.
- assertInstanceof(e, RangeError);
+ // postMessage failed, should be a DataCloneError message.
+ assertContains('cloned', e.message);
+ threw = true;
}
+ assertTrue(threw, 'Should throw when trying to serialize large message.');
}