Move away from Singleton
Move from Singleton to LazyInstance for one-of classes in Shill.
This will allow them to be subclassed (mocked).
BUG=chromium-os:18986
TEST=Re-run unit tests
Change-Id: I83320694db5df1a263332315ad4f6955b107280b
Reviewed-on: http://gerrit.chromium.org/gerrit/5676
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/dhcp_provider.h b/dhcp_provider.h
index fd83029..5d96ee1 100644
--- a/dhcp_provider.h
+++ b/dhcp_provider.h
@@ -8,8 +8,8 @@
#include <map>
#include <string>
+#include <base/lazy_instance.h>
#include <base/memory/scoped_ptr.h>
-#include <base/memory/singleton.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "shill/refptr_types.h"
@@ -29,6 +29,8 @@
// DHCPProvider::GetInstance()->CreateConfig(device_name)->Request();
class DHCPProvider {
public:
+ virtual ~DHCPProvider();
+
// This is a singleton -- use DHCPProvider::GetInstance()->Foo()
static DHCPProvider *GetInstance();
@@ -57,8 +59,11 @@
// destruction of the DHCP config instance if its reference count goes to 0.
void UnbindPID(int pid);
+ protected:
+ DHCPProvider();
+
private:
- friend struct DefaultSingletonTraits<DHCPProvider>;
+ friend struct base::DefaultLazyInstanceTraits<DHCPProvider>;
friend class DHCPProviderTest;
friend class DeviceInfoTest;
friend class DeviceTest;
@@ -66,10 +71,6 @@
typedef std::map<int, DHCPConfigRefPtr> PIDConfigMap;
- // Private to ensure that this behaves as a singleton.
- DHCPProvider();
- virtual ~DHCPProvider();
-
// A single listener is used to catch signals from all DHCP clients and
// dispatch them to the appropriate DHCP configuration instance.
scoped_ptr<DHCPCDListener> listener_;