Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1617)

Unified Diff: content/common/child_process.cc

Issue 6966030: Allow multiple ChildProcess objects in one process for the --single-process case, when we have bo... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/common/child_process.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/child_process.cc
===================================================================
--- content/common/child_process.cc (revision 86367)
+++ content/common/child_process.cc (working copy)
@@ -8,10 +8,12 @@
#include <signal.h> // For SigUSR1Handler below.
#endif
+#include "base/lazy_instance.h"
#include "base/message_loop.h"
#include "base/process_util.h"
#include "base/string_number_conversions.h"
#include "base/threading/thread.h"
+#include "base/threading/thread_local.h"
#include "base/utf_string_conversions.h"
#include "content/common/child_thread.h"
@@ -19,20 +21,23 @@
static void SigUSR1Handler(int signal) { }
#endif
-ChildProcess* ChildProcess::child_process_;
+namespace {
+static base::LazyInstance<base::ThreadLocalPointer<ChildProcess> > lazy_tls(
+ base::LINKER_INITIALIZED);
+}
ChildProcess::ChildProcess()
: ref_count_(0),
shutdown_event_(true, false),
io_thread_("Chrome_ChildIOThread") {
- DCHECK(!child_process_);
- child_process_ = this;
+ DCHECK(!lazy_tls.Pointer()->Get());
+ lazy_tls.Pointer()->Set(this);
io_thread_.StartWithOptions(base::Thread::Options(MessageLoop::TYPE_IO, 0));
}
ChildProcess::~ChildProcess() {
- DCHECK(child_process_ == this);
+ DCHECK(lazy_tls.Pointer()->Get() == this);
// Signal this event before destroying the child process. That way all
// background threads can cleanup.
@@ -40,13 +45,17 @@
// notice shutdown before the render process begins waiting for them to exit.
shutdown_event_.Signal();
- // Kill the main thread object before nulling child_process_, since
+ // Kill the main thread object before nulling lazy_tls, since
// destruction code might depend on it.
main_thread_.reset();
- child_process_ = NULL;
+ lazy_tls.Pointer()->Set(NULL);
}
+ChildProcess* ChildProcess::current() {
+ return lazy_tls.Pointer()->Get();
+}
+
ChildThread* ChildProcess::main_thread() {
return main_thread_.get();
}
@@ -65,7 +74,6 @@
DCHECK(!main_thread_.get() || // null in unittests.
MessageLoop::current() == main_thread_->message_loop());
DCHECK(ref_count_);
- DCHECK(child_process_);
if (--ref_count_)
return;
@@ -74,8 +82,7 @@
}
base::WaitableEvent* ChildProcess::GetShutDownEvent() {
- DCHECK(child_process_);
- return &child_process_->shutdown_event_;
+ return &lazy_tls.Pointer()->Get()->shutdown_event_;
}
void ChildProcess::WaitForDebugger(const std::string& label) {
« no previous file with comments | « content/common/child_process.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698