Commit 0b301b10 authored by jam@chromium.org's avatar jam@chromium.org

Fix the crashes in interactive_ui_tests on Linux.

The cause is really subtle.  When I added a db_thread() in BrowserMain, that changed the order that threads were created at.  Since interactive ui tests don't run atexitmanager (I filed a bug to make them do), this cascaded into file_posix.cc's InFlightIO singelton caching the first IO MessageLoop pointer.  By fluke, previously each IO ML would have the exact same pointer value (must be a unique size for the allocator).  My change modified the construction order, so the second run would have a different ChromeThread (file) get the previous IO thread's ML pointer.  That led to the asserts.  I have added code to start the threads in a predictable manner for now.

BUG=25354
TEST=interactive_ui_tests in Linux stop crashing
Review URL: http://codereview.chromium.org/340017

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30303 0039d316-1c4b-4281-b951-d872f2087c98
parent 9a25a6ba
...@@ -410,10 +410,6 @@ int BrowserMain(const MainFunctionParams& parameters) { ...@@ -410,10 +410,6 @@ int BrowserMain(const MainFunctionParams& parameters) {
local_state->RegisterBooleanPref(prefs::kMetricsReportingEnabled, local_state->RegisterBooleanPref(prefs::kMetricsReportingEnabled,
GoogleUpdateSettings::GetCollectStatsConsent()); GoogleUpdateSettings::GetCollectStatsConsent());
// Start the database thread (the order of when this happens in this function
// doesn't matter, all we need is to kick it off).
browser_process->db_thread();
#if defined(TOOLKIT_GTK) #if defined(TOOLKIT_GTK)
// It is important for this to happen before the first run dialog, as it // It is important for this to happen before the first run dialog, as it
// styles the dialog as well. // styles the dialog as well.
...@@ -718,6 +714,12 @@ int BrowserMain(const MainFunctionParams& parameters) { ...@@ -718,6 +714,12 @@ int BrowserMain(const MainFunctionParams& parameters) {
net::EnsureWinsockInit(); net::EnsureWinsockInit();
#endif // defined(OS_WIN) #endif // defined(OS_WIN)
// Create the child threads. We need to do this since ChromeThread::PostTask
// silently deletes a posted task if the target message loop isn't created.
browser_process->db_thread();
browser_process->file_thread();
browser_process->io_thread();
// Initialize and maintain DNS prefetcher module. // Initialize and maintain DNS prefetcher module.
chrome_browser_net::DnsPrefetcherInit dns_prefetch(user_prefs, local_state); chrome_browser_net::DnsPrefetcherInit dns_prefetch(user_prefs, local_state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment