| Index: content/browser/browser_thread_impl.cc
|
| diff --git a/content/browser/browser_thread_impl.cc b/content/browser/browser_thread_impl.cc
|
| index 78e3836dadeef038f5db6e1a7fd0b1a3352fd8b6..1aac305bcb8b2a05e247276c36b77c54e9e98c34 100644
|
| --- a/content/browser/browser_thread_impl.cc
|
| +++ b/content/browser/browser_thread_impl.cc
|
| @@ -159,14 +159,8 @@ void BrowserThreadImpl::Init() {
|
| AtomicWord stored_pointer = base::subtle::NoBarrier_Load(storage);
|
| BrowserThreadDelegate* delegate =
|
| reinterpret_cast<BrowserThreadDelegate*>(stored_pointer);
|
| - if (delegate) {
|
| + if (delegate)
|
| delegate->Init();
|
| - message_loop()->PostTask(FROM_HERE,
|
| - base::Bind(&BrowserThreadDelegate::InitAsync,
|
| - // Delegate is expected to exist for the
|
| - // duration of the thread's lifetime
|
| - base::Unretained(delegate)));
|
| - }
|
| }
|
|
|
| // We disable optimizations for this block of functions so the compiler doesn't
|
| @@ -300,6 +294,15 @@ BrowserThreadImpl::~BrowserThreadImpl() {
|
| #endif
|
| }
|
|
|
| +bool BrowserThreadImpl::StartWithOptions(const Options& options) {
|
| + // The global thread table needs to be locked while a new thread is
|
| + // starting, as the new thread can asynchronously start touching the
|
| + // table (and other thread's message_loop).
|
| + BrowserThreadGlobals& globals = g_globals.Get();
|
| + base::AutoLock lock(globals.lock);
|
| + return Thread::StartWithOptions(options);
|
| +}
|
| +
|
| // static
|
| bool BrowserThreadImpl::PostTaskHelper(
|
| BrowserThread::ID identifier,
|
|
|