summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_process_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/browser_process_impl.cc')
-rw-r--r--chrome/browser/browser_process_impl.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 5e1d9f3..5b7b6b6 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -171,6 +171,11 @@ BrowserProcessImpl::~BrowserProcessImpl() {
io_thread_->message_loop()->PostTask(FROM_HERE,
NewRunnableFunction(chrome_browser_net::EnsureDnsPrefetchShutdown));
+#if defined(OS_LINUX)
+ // The IO thread must outlive the BACKGROUND_X11 thread.
+ background_x11_thread_.reset();
+#endif
+
// Need to stop io_thread_ before resource_dispatcher_host_, since
// io_thread_ may still deref ResourceDispatcherHost and handle resource
// request before going away.
@@ -284,6 +289,16 @@ void BrowserProcessImpl::CreateIOThread() {
// invoke the io_thread() accessor.
PluginService::GetInstance();
+#if defined(OS_LINUX)
+ // The lifetime of the BACKGROUND_X11 thread is a subset of the IO thread so
+ // we start it now.
+ scoped_ptr<base::Thread> background_x11_thread(
+ new BrowserProcessSubThread(ChromeThread::BACKGROUND_X11));
+ if (!background_x11_thread->Start())
+ return;
+ background_x11_thread_.swap(background_x11_thread);
+#endif
+
scoped_ptr<base::Thread> thread(
new BrowserProcessSubThread(ChromeThread::IO));
base::Thread::Options options;