Index: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
index 130d539b4ef053726821e1968e10753b6c00ba7e..9b27402ed8a279e8503bf3d01246f439f58f7c1f 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
@@ -247,11 +247,16 @@ void RendererSchedulerImpl::Shutdown() { |
MainThreadOnly().background_main_thread_load_tracker.RecordIdle(now); |
MainThreadOnly().foreground_main_thread_load_tracker.RecordIdle(now); |
- task_queue_throttler_.reset(); |
helper_.Shutdown(); |
idle_helper_.Shutdown(); |
MainThreadOnly().was_shutdown = true; |
MainThreadOnly().rail_mode_observer = nullptr; |
+ |
+ // Note this must be done after shutting down |helper_| because otherwise |
+ // there's a window where another thread posting a task to a throttled queue |
+ // during shutdown might try to access the deleted TimeDomain owned by |
+ // |task_queue_throttler_|. |
+ task_queue_throttler_.reset(); |
} |
std::unique_ptr<blink::WebThread> RendererSchedulerImpl::CreateMainThread() { |