Index: components/memory_coordinator/child/child_memory_coordinator_impl.cc |
diff --git a/components/memory_coordinator/child/child_memory_coordinator_impl.cc b/components/memory_coordinator/child/child_memory_coordinator_impl.cc |
index 1e4a9c8ecd22df7664935112f75398660279c1ba..75dd8ed5243e46e1ee1cec024a90a67f034a700d 100644 |
--- a/components/memory_coordinator/child/child_memory_coordinator_impl.cc |
+++ b/components/memory_coordinator/child/child_memory_coordinator_impl.cc |
@@ -4,17 +4,39 @@ |
#include "components/memory_coordinator/child/child_memory_coordinator_impl.h" |
+#include "base/lazy_instance.h" |
+#include "base/synchronization/lock.h" |
+ |
namespace memory_coordinator { |
+namespace { |
+ |
+base::LazyInstance<base::Lock>::Leaky g_lock = LAZY_INSTANCE_INITIALIZER; |
bashi
2016/08/29 09:52:06
Not sure we really need a lock. Can be removed whe
haraken
2016/09/01 18:49:10
I begin to think that ChildMemoryCoordinator must
bashi
2016/09/01 22:53:39
Making ChildMemoryCoordinator only accessible via
|
+ChildMemoryCoordinatorImpl* g_child_memory_coordinator = nullptr; |
+ |
+} // namespace |
+ |
+// static |
+ChildMemoryCoordinatorImpl* ChildMemoryCoordinatorImpl::GetInstance() { |
+ base::AutoLock lock(*g_lock.Pointer()); |
+ return g_child_memory_coordinator; |
+} |
+ |
ChildMemoryCoordinatorImpl::ChildMemoryCoordinatorImpl( |
mojom::MemoryCoordinatorHandlePtr parent, |
ChildMemoryCoordinatorDelegate* delegate) |
: binding_(this), parent_(std::move(parent)), delegate_(delegate) { |
+ base::AutoLock lock(*g_lock.Pointer()); |
DCHECK(delegate_); |
+ DCHECK(!g_child_memory_coordinator); |
+ g_child_memory_coordinator = this; |
parent_->AddChild(binding_.CreateInterfacePtrAndBind()); |
} |
ChildMemoryCoordinatorImpl::~ChildMemoryCoordinatorImpl() { |
+ base::AutoLock lock(*g_lock.Pointer()); |
+ DCHECK(g_child_memory_coordinator == this); |
+ g_child_memory_coordinator = nullptr; |
} |
void ChildMemoryCoordinatorImpl::OnStateChange(mojom::MemoryState state) { |