diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-23 00:25:06 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-23 00:25:06 +0000 |
commit | f784592cd075d7866c74e410833768c8b6f9b622 (patch) | |
tree | 8512d6dc402faef8df803c7ff07ba5b77eecda3f /chrome/common/child_process.cc | |
parent | a63f220009f90657fc1070d4a9bde26726deb6b4 (diff) | |
download | chromium_src-f784592cd075d7866c74e410833768c8b6f9b622.zip chromium_src-f784592cd075d7866c74e410833768c8b6f9b622.tar.gz chromium_src-f784592cd075d7866c74e410833768c8b6f9b622.tar.bz2 |
Switch the first thread in a child process to be the main thread, and make theIO thread be the second thread. The change is needed for plugins on mac.
Review URL: http://codereview.chromium.org/155944
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21355 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/child_process.cc')
-rw-r--r-- | chrome/common/child_process.cc | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/chrome/common/child_process.cc b/chrome/common/child_process.cc index f32708c..34ea7a2 100644 --- a/chrome/common/child_process.cc +++ b/chrome/common/child_process.cc @@ -9,14 +9,14 @@ ChildProcess* ChildProcess::child_process_; -ChildProcess::ChildProcess(ChildThread* child_thread) - : child_thread_(child_thread), - ref_count_(0), - shutdown_event_(true, false) { +ChildProcess::ChildProcess() + : ref_count_(0), + shutdown_event_(true, false), + io_thread_("Chrome_ChildIOThread") { DCHECK(!child_process_); child_process_ = this; - if (child_thread_.get()) // null in unittests. - child_thread_->Run(); + + io_thread_.StartWithOptions(base::Thread::Options(MessageLoop::TYPE_IO, 0)); } ChildProcess::~ChildProcess() { @@ -28,28 +28,29 @@ ChildProcess::~ChildProcess() { // notice shutdown before the render process begins waiting for them to exit. shutdown_event_.Signal(); - if (child_thread_.get()) - child_thread_->Stop(); + // Kill the main thread object before nulling child_process_, since + // destruction code might depend on it. + main_thread_.reset(); child_process_ = NULL; } void ChildProcess::AddRefProcess() { - DCHECK(!child_thread_.get() || // null in unittests. - MessageLoop::current() == child_thread_->message_loop()); + DCHECK(!main_thread_.get() || // null in unittests. + MessageLoop::current() == main_thread_->message_loop()); ref_count_++; } void ChildProcess::ReleaseProcess() { - DCHECK(!child_thread_.get() || // null in unittests. - MessageLoop::current() == child_thread_->message_loop()); + DCHECK(!main_thread_.get() || // null in unittests. + MessageLoop::current() == main_thread_->message_loop()); DCHECK(ref_count_); DCHECK(child_process_); if (--ref_count_) return; - if (child_thread_.get()) // null in unittests. - child_thread_->OnProcessFinalRelease(); + if (main_thread_.get()) // null in unittests. + main_thread_->OnProcessFinalRelease(); } base::WaitableEvent* ChildProcess::GetShutDownEvent() { |