| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index 526e454c5496a46da6892626ea8a48b0f75a8468..a6ba224890db29727486a1ada531d87055d337d8 100644
|
| --- a/content/renderer/render_thread_impl.cc
|
| +++ b/content/renderer/render_thread_impl.cc
|
| @@ -971,12 +971,25 @@
|
| // objects after Blink shuts down.
|
| renderer_scheduler_->SetRAILModeObserver(nullptr);
|
| renderer_scheduler_->Shutdown();
|
| -
|
| - ChildThreadImpl::ShutdownDiscardableSharedMemoryManager();
|
| -
|
| if (main_message_loop_)
|
| base::RunLoop().RunUntilIdle();
|
|
|
| + if (blink_platform_impl_) {
|
| + blink_platform_impl_->Shutdown();
|
| + // This must be at the very end of the shutdown sequence.
|
| + // blink::shutdown() must be called after all strong references from
|
| + // Chromium to Blink are cleared.
|
| + blink::shutdown();
|
| + }
|
| +
|
| + // Delay shutting down DiscardableSharedMemoryManager until blink::shutdown
|
| + // is complete, because blink::shutdown destructs Blink Resources and they
|
| + // may try to unlock their underlying discardable memory.
|
| + ChildThreadImpl::ShutdownDiscardableSharedMemoryManager();
|
| +
|
| + // The message loop must be cleared after shutting down
|
| + // the DiscardableSharedMemoryManager, which needs to send messages
|
| + // to the browser process.
|
| main_message_loop_.reset();
|
|
|
| lazy_tls.Pointer()->Set(nullptr);
|
|
|