Index: content/renderer/render_thread_impl.cc |
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
index 3b2ff69cf48366cb6fcdfae4420f3a28611dd66c..1df46e9c7a671fcf1e720e24a441350f503061c0 100644 |
--- a/content/renderer/render_thread_impl.cc |
+++ b/content/renderer/render_thread_impl.cc |
@@ -401,6 +401,13 @@ RenderThreadImpl::RenderThreadImpl(const std::string& channel_name) |
Init(); |
} |
+RenderThreadImpl::RenderThreadImpl( |
+ scoped_ptr<base::MessageLoop> main_message_loop) |
+ : ChildThread(Options(ShouldUseMojoChannel())), |
+ main_message_loop_(main_message_loop.Pass()) { |
+ Init(); |
+} |
+ |
void RenderThreadImpl::Init() { |
TRACE_EVENT_BEGIN_ETW("RenderThreadImpl::Init", 0, ""); |
@@ -657,6 +664,12 @@ void RenderThreadImpl::Shutdown() { |
main_thread_compositor_task_runner_ = NULL; |
+ gpu_channel_ = NULL; |
+ |
+ // Shut down the message loop before shutting down Blink. |
+ // This prevents a scenario where a pending task in the message loop accesses |
+ // Blink objects after Blink shuts down. |
+ main_message_loop_.reset(); |
if (webkit_platform_support_) |
blink::shutdown(); |