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

Unified Diff: chromeos/network/network_state_handler.cc

Issue 1562593002: Fix potential crashes in NetworkHandler code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@test
Patch Set: Call NetworkStateHandler::Shutdown in destructor for unit tests Created 4 years, 11 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
Index: chromeos/network/network_state_handler.cc
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
index 5f4738a6cdfa0335e61aa025d72dfdf589114e36..7396d45b6783c141286fdf527558c567d9df6469 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -67,15 +67,21 @@ std::string ValueAsString(const base::Value& value) {
const char NetworkStateHandler::kDefaultCheckPortalList[] =
"ethernet,wifi,cellular";
-NetworkStateHandler::NetworkStateHandler() : network_list_sorted_(false) {
-}
+NetworkStateHandler::NetworkStateHandler() {}
NetworkStateHandler::~NetworkStateHandler() {
oshima 2016/01/06 22:57:23 I believe Shutodnw() must have been called at this
stevenjb 2016/01/06 23:28:31 So, -usually- Shutdown will get called. However, i
oshima 2016/01/07 00:21:12 Yeah, I prefer to have the same code path on test
stevenjb 2016/01/07 17:07:47 So do I. Unfortunately sometimes that conflicts w
oshima 2016/01/07 18:14:17 There are multiple principals (minimizing divergen
- FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, IsShuttingDown());
+ Shutdown();
STLDeleteContainerPointers(network_list_.begin(), network_list_.end());
STLDeleteContainerPointers(device_list_.begin(), device_list_.end());
}
+void NetworkStateHandler::Shutdown() {
+ if (did_shutdown_)
+ return;
+ did_shutdown_ = true;
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, IsShuttingDown());
+}
+
void NetworkStateHandler::InitShillPropertyHandler() {
shill_property_handler_.reset(new internal::ShillPropertyHandler(this));
shill_property_handler_->Init();
@@ -92,20 +98,27 @@ void NetworkStateHandler::AddObserver(
NetworkStateHandlerObserver* observer,
const tracked_objects::Location& from_here) {
observers_.AddObserver(observer);
- device_event_log::AddEntry(from_here.file_name(), from_here.line_number(),
- device_event_log::LOG_TYPE_NETWORK,
- device_event_log::LOG_LEVEL_DEBUG,
- "NetworkStateHandler::AddObserver");
+ device_event_log::AddEntry(
+ from_here.file_name(), from_here.line_number(),
+ device_event_log::LOG_TYPE_NETWORK, device_event_log::LOG_LEVEL_DEBUG,
+ base::StringPrintf("NetworkStateHandler::AddObserver: 0x%p", observer));
+
+ LOG(ERROR) << "ADD Observer: " << from_here.file_name() << ":"
+ << from_here.line_number() << ": " << observer;
}
void NetworkStateHandler::RemoveObserver(
NetworkStateHandlerObserver* observer,
const tracked_objects::Location& from_here) {
observers_.RemoveObserver(observer);
- device_event_log::AddEntry(from_here.file_name(), from_here.line_number(),
- device_event_log::LOG_TYPE_NETWORK,
- device_event_log::LOG_LEVEL_DEBUG,
- "NetworkStateHandler::RemoveObserver");
+ device_event_log::AddEntry(
+ from_here.file_name(), from_here.line_number(),
+ device_event_log::LOG_TYPE_NETWORK, device_event_log::LOG_LEVEL_DEBUG,
+ base::StringPrintf("NetworkStateHandler::RemoveObserver: 0x%p",
+ observer));
+
+ LOG(ERROR) << "REM Observer: " << from_here.file_name() << ":"
+ << from_here.line_number() << ": " << observer;
}
NetworkStateHandler::TechnologyState NetworkStateHandler::GetTechnologyState(

Powered by Google App Engine
This is Rietveld 408576698