Index: chromeos/dbus/dbus_thread_manager.cc |
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc |
index cc286b547ac8164841ba185d3b9295f8cda4ad0b..95dd2432e70e0e7ffdfd7a991e7e4e7e29595987 100644 |
--- a/chromeos/dbus/dbus_thread_manager.cc |
+++ b/chromeos/dbus/dbus_thread_manager.cc |
@@ -521,8 +521,9 @@ void DBusThreadManager::Shutdown() { |
// If we called InitializeForTesting, this may get called more than once. |
// Ensure that we only shutdown DBusThreadManager once. |
CHECK(g_dbus_thread_manager || g_dbus_thread_manager_set_for_testing); |
- delete g_dbus_thread_manager; |
+ DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager; |
g_dbus_thread_manager = NULL; |
+ delete dbus_thread_manager; |
VLOG(1) << "DBusThreadManager Shutdown completed"; |
} |
@@ -532,6 +533,17 @@ DBusThreadManager::DBusThreadManager() { |
DBusThreadManager::~DBusThreadManager() { |
dbus::statistics::Shutdown(); |
+ if (g_dbus_thread_manager == NULL) |
+ return; // Called form Shutdown() or local test instance. |
+ // There should never be both a global instance and a local instance. |
+ CHECK(this == g_dbus_thread_manager); |
+ if (g_dbus_thread_manager_set_for_testing) { |
+ g_dbus_thread_manager = NULL; |
+ g_dbus_thread_manager_set_for_testing = false; |
+ VLOG(1) << "DBusThreadManager destroyed"; |
+ } else { |
+ LOG(FATAL) << "~DBusThreadManager() called outside of Shutdown()"; |
+ } |
} |
// static |