Chromium Code Reviews| Index: gin/v8_platform.cc |
| diff --git a/gin/v8_platform.cc b/gin/v8_platform.cc |
| index 945eee0cc3d9798730130ebbe44d3d5acb92d4f7..bbbf4d076a287c6b6a62c1cb0247e6d5ce6d5270 100644 |
| --- a/gin/v8_platform.cc |
| +++ b/gin/v8_platform.cc |
| @@ -17,6 +17,11 @@ namespace { |
| base::LazyInstance<V8Platform>::Leaky g_v8_platform = LAZY_INSTANCE_INITIALIZER; |
| +void RunWithLocker(v8::Isolate* isolate, v8::Task* task) { |
| + v8::Locker lock(isolate); |
| + task->Run(); |
| +} |
| + |
| } // namespace |
| // static |
| @@ -49,8 +54,15 @@ void V8Platform::CallOnBackgroundThread( |
| } |
| void V8Platform::CallOnForegroundThread(v8::Isolate* isolate, v8::Task* task) { |
| - PerIsolateData::From(isolate)->task_runner()->PostTask( |
| - FROM_HERE, base::Bind(&v8::Task::Run, base::Owned(task))); |
| + PerIsolateData* data = PerIsolateData::From(isolate); |
|
ulan
2016/11/04 14:28:30
The same change should apply to other Call*OnForeg
|
| + if (data->access_mode() == IsolateHolder::kUseLocker) { |
| + data->task_runner()->PostTask( |
| + FROM_HERE, base::Bind(RunWithLocker, base::Unretained(isolate), |
| + base::Owned(task))); |
| + } else { |
| + data->task_runner()->PostTask( |
| + FROM_HERE, base::Bind(&v8::Task::Run, base::Owned(task))); |
| + } |
| } |
| void V8Platform::CallDelayedOnForegroundThread(v8::Isolate* isolate, |