Commit 2b1753ac authored by ulan's avatar ulan Committed by Commit bot

Fix a race condition in simulator that happens when flushing icache.

During GC multiple threads can request icache flush when evacuating
code space in parallel.

Simulator::FlushICache updates Isolate::simulator_icache hashmap,
which leads to a race.

This patch adds a lock for simulator_icache.

BUG=

Review-Url: https://codereview.chromium.org/2338793002
Cr-Commit-Position: refs/heads/master@{#39386}
parent 85289749
...@@ -190,6 +190,7 @@ void AssemblerBase::FlushICache(Isolate* isolate, void* start, size_t size) { ...@@ -190,6 +190,7 @@ void AssemblerBase::FlushICache(Isolate* isolate, void* start, size_t size) {
if (size == 0) return; if (size == 0) return;
#if defined(USE_SIMULATOR) #if defined(USE_SIMULATOR)
base::LockGuard<base::Mutex> lock_guard(isolate->simulator_i_cache_mutex());
Simulator::FlushICache(isolate->simulator_i_cache(), start, size); Simulator::FlushICache(isolate->simulator_i_cache(), start, size);
#else #else
CpuFeatures::FlushICache(start, size); CpuFeatures::FlushICache(start, size);
......
...@@ -1164,6 +1164,10 @@ class Isolate { ...@@ -1164,6 +1164,10 @@ class Isolate {
PRINTF_FORMAT(2, 3) void PrintWithTimestamp(const char* format, ...); PRINTF_FORMAT(2, 3) void PrintWithTimestamp(const char* format, ...);
#ifdef USE_SIMULATOR
base::Mutex* simulator_i_cache_mutex() { return &simulator_i_cache_mutex_; }
#endif
protected: protected:
explicit Isolate(bool enable_serializer); explicit Isolate(bool enable_serializer);
bool IsArrayOrObjectPrototype(Object* object); bool IsArrayOrObjectPrototype(Object* object);
...@@ -1440,6 +1444,10 @@ class Isolate { ...@@ -1440,6 +1444,10 @@ class Isolate {
v8::Isolate::AbortOnUncaughtExceptionCallback v8::Isolate::AbortOnUncaughtExceptionCallback
abort_on_uncaught_exception_callback_; abort_on_uncaught_exception_callback_;
#ifdef USE_SIMULATOR
base::Mutex simulator_i_cache_mutex_;
#endif
friend class ExecutionAccess; friend class ExecutionAccess;
friend class HandleScopeImplementer; friend class HandleScopeImplementer;
friend class OptimizingCompileDispatcher; friend class OptimizingCompileDispatcher;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment