| Index: content/child/child_process.cc
|
| ===================================================================
|
| --- content/child/child_process.cc (revision 208740)
|
| +++ content/child/child_process.cc (working copy)
|
| @@ -8,12 +8,14 @@
|
| #include <signal.h> // For SigUSR1Handler below.
|
| #endif
|
|
|
| +#include "base/lazy_instance.h"
|
| #include "base/message_loop.h"
|
| #include "base/metrics/statistics_recorder.h"
|
| #include "base/process_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/threading/thread.h"
|
| +#include "base/threading/thread_local.h"
|
| #include "content/child/child_thread.h"
|
|
|
| #if defined(OS_ANDROID)
|
| @@ -25,15 +27,19 @@
|
| #endif
|
|
|
| namespace content {
|
| -// The singleton instance for this process.
|
| -ChildProcess* child_process = NULL;
|
|
|
| +namespace {
|
| +
|
| +base::LazyInstance<base::ThreadLocalPointer<ChildProcess> > g_lazy_tls =
|
| + LAZY_INSTANCE_INITIALIZER;
|
| +}
|
| +
|
| ChildProcess::ChildProcess()
|
| : ref_count_(0),
|
| shutdown_event_(true, false),
|
| io_thread_("Chrome_ChildIOThread") {
|
| - DCHECK(!child_process);
|
| - child_process = this;
|
| + DCHECK(!g_lazy_tls.Pointer()->Get());
|
| + g_lazy_tls.Pointer()->Set(this);
|
|
|
| base::StatisticsRecorder::Initialize();
|
|
|
| @@ -47,7 +53,7 @@
|
| }
|
|
|
| ChildProcess::~ChildProcess() {
|
| - DCHECK(child_process == this);
|
| + DCHECK(g_lazy_tls.Pointer()->Get() == this);
|
|
|
| // Signal this event before destroying the child process. That way all
|
| // background threads can cleanup.
|
| @@ -62,7 +68,7 @@
|
| main_thread_.reset();
|
| }
|
|
|
| - child_process = NULL;
|
| + g_lazy_tls.Pointer()->Set(NULL);
|
| }
|
|
|
| ChildThread* ChildProcess::main_thread() {
|
| @@ -83,7 +89,6 @@
|
| DCHECK(!main_thread_.get() || // null in unittests.
|
| base::MessageLoop::current() == main_thread_->message_loop());
|
| DCHECK(ref_count_);
|
| - DCHECK(child_process);
|
| if (--ref_count_)
|
| return;
|
|
|
| @@ -92,12 +97,11 @@
|
| }
|
|
|
| ChildProcess* ChildProcess::current() {
|
| - return child_process;
|
| + return g_lazy_tls.Pointer()->Get();
|
| }
|
|
|
| base::WaitableEvent* ChildProcess::GetShutDownEvent() {
|
| - DCHECK(child_process);
|
| - return &child_process->shutdown_event_;
|
| + return &shutdown_event_;
|
| }
|
|
|
| void ChildProcess::WaitForDebugger(const std::string& label) {
|
|
|