diff options
author | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 16:28:21 +0000 |
---|---|---|
committer | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 16:28:21 +0000 |
commit | eeba404f477708927b258392bd959ce925fa11d9 (patch) | |
tree | 9a6d93b7a7eab5d3b920152a076d65b34d953197 | |
parent | 906e2965b4ef7a553c0ff3222a63cf62d828205b (diff) | |
download | chromium_src-eeba404f477708927b258392bd959ce925fa11d9.zip chromium_src-eeba404f477708927b258392bd959ce925fa11d9.tar.gz chromium_src-eeba404f477708927b258392bd959ce925fa11d9.tar.bz2 |
Fix NetworkLibrary memory leaks and warnings.
BUG=chromium:89684
TEST=Run linux_chromeos_valgrind and make sure there are no leaks in network_library.cc
Review URL: http://codereview.chromium.org/7468035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93653 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/cros/network_library.cc | 130 | ||||
-rw-r--r-- | tools/valgrind/memcheck/suppressions.txt | 34 |
2 files changed, 72 insertions, 92 deletions
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc index 903347e..b70610d 100644 --- a/chrome/browser/chromeos/cros/network_library.cc +++ b/chrome/browser/chromeos/cros/network_library.cc @@ -102,7 +102,7 @@ const int kRecentPlanPaymentHours = 6; const int kDefaultSimUnlockRetriesCount = 999; // Format of the Carrier ID: <carrier name> (<carrier country>). -const char* kCarrierIdFormat = "%s (%s)"; +const char kCarrierIdFormat[] = "%s (%s)"; // Type of a pending SIM operation. enum SimOperationType { @@ -115,20 +115,26 @@ enum SimOperationType { // D-Bus interface string constants. -// Flimflam property names. -const char kSecurityProperty[] = "Security"; -const char kPassphraseProperty[] = "Passphrase"; -const char kIdentityProperty[] = "Identity"; -const char kPassphraseRequiredProperty[] = "PassphraseRequired"; -const char kSaveCredentialsProperty[] = "SaveCredentials"; -const char kProfilesProperty[] = "Profiles"; -const char kServicesProperty[] = "Services"; -const char kServiceWatchListProperty[] = "ServiceWatchList"; +// Flimflam manager properties. const char kAvailableTechnologiesProperty[] = "AvailableTechnologies"; const char kEnabledTechnologiesProperty[] = "EnabledTechnologies"; const char kConnectedTechnologiesProperty[] = "ConnectedTechnologies"; const char kDefaultTechnologyProperty[] = "DefaultTechnology"; const char kOfflineModeProperty[] = "OfflineMode"; +const char kActiveProfileProperty[] = "ActiveProfile"; +const char kProfilesProperty[] = "Profiles"; +const char kServicesProperty[] = "Services"; +const char kServiceWatchListProperty[] = "ServiceWatchList"; +const char kDevicesProperty[] = "Devices"; +const char kPortalURLProperty[] = "PortalURL"; +const char kCheckPortalListProperty[] = "CheckPortalList"; + +// Flimflam service properties. +const char kSecurityProperty[] = "Security"; +const char kPassphraseProperty[] = "Passphrase"; +const char kIdentityProperty[] = "Identity"; +const char kPassphraseRequiredProperty[] = "PassphraseRequired"; +const char kSaveCredentialsProperty[] = "SaveCredentials"; const char kSignalStrengthProperty[] = "Strength"; const char kNameProperty[] = "Name"; const char kStateProperty[] = "State"; @@ -158,12 +164,10 @@ const char kAutoConnectProperty[] = "AutoConnect"; const char kIsActiveProperty[] = "IsActive"; const char kModeProperty[] = "Mode"; const char kErrorProperty[] = "Error"; -const char kActiveProfileProperty[] = "ActiveProfile"; const char kEntriesProperty[] = "Entries"; -const char kDevicesProperty[] = "Devices"; const char kProviderProperty[] = "Provider"; const char kHostProperty[] = "Host"; -const char* kProxyConfigProperty = "ProxyConfig"; +const char kProxyConfigProperty[] = "ProxyConfig"; // Flimflam property names for SIMLock status. const char kSIMLockStatusProperty[] = "Cellular.SIMLockStatus"; @@ -458,29 +462,30 @@ enum PropertyIndex { PROPERTY_INDEX_CELLULAR_APN, PROPERTY_INDEX_CELLULAR_APN_LIST, PROPERTY_INDEX_CELLULAR_LAST_GOOD_APN, + PROPERTY_INDEX_CHECK_PORTAL_LIST, PROPERTY_INDEX_CONNECTABLE, PROPERTY_INDEX_CONNECTED_TECHNOLOGIES, PROPERTY_INDEX_CONNECTIVITY_STATE, PROPERTY_INDEX_DEFAULT_TECHNOLOGY, PROPERTY_INDEX_DEVICE, PROPERTY_INDEX_DEVICES, - PROPERTY_INDEX_EAP_IDENTITY, - PROPERTY_INDEX_EAP_METHOD, - PROPERTY_INDEX_EAP_PHASE_2_AUTH, PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY, - PROPERTY_INDEX_EAP_CLIENT_CERT, + PROPERTY_INDEX_EAP_CA_CERT, + PROPERTY_INDEX_EAP_CA_CERT_ID, + PROPERTY_INDEX_EAP_CA_CERT_NSS, PROPERTY_INDEX_EAP_CERT_ID, + PROPERTY_INDEX_EAP_CLIENT_CERT, PROPERTY_INDEX_EAP_CLIENT_CERT_NSS, + PROPERTY_INDEX_EAP_IDENTITY, + PROPERTY_INDEX_EAP_KEY_ID, + PROPERTY_INDEX_EAP_KEY_MGMT, + PROPERTY_INDEX_EAP_METHOD, + PROPERTY_INDEX_EAP_PASSWORD, + PROPERTY_INDEX_EAP_PHASE_2_AUTH, + PROPERTY_INDEX_EAP_PIN, PROPERTY_INDEX_EAP_PRIVATE_KEY, PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD, - PROPERTY_INDEX_EAP_KEY_ID, - PROPERTY_INDEX_EAP_CA_CERT, - PROPERTY_INDEX_EAP_CA_CERT_ID, - PROPERTY_INDEX_EAP_CA_CERT_NSS, PROPERTY_INDEX_EAP_USE_SYSTEM_CAS, - PROPERTY_INDEX_EAP_PIN, - PROPERTY_INDEX_EAP_PASSWORD, - PROPERTY_INDEX_EAP_KEY_MGMT, PROPERTY_INDEX_ENABLED_TECHNOLOGIES, PROPERTY_INDEX_ERROR, PROPERTY_INDEX_ESN, @@ -508,14 +513,15 @@ enum PropertyIndex { PROPERTY_INDEX_MODE, PROPERTY_INDEX_MODEL_ID, PROPERTY_INDEX_NAME, - PROPERTY_INDEX_NETWORK_TECHNOLOGY, PROPERTY_INDEX_NETWORKS, + PROPERTY_INDEX_NETWORK_TECHNOLOGY, PROPERTY_INDEX_OFFLINE_MODE, PROPERTY_INDEX_OPERATOR_CODE, PROPERTY_INDEX_OPERATOR_NAME, PROPERTY_INDEX_PASSPHRASE, PROPERTY_INDEX_PASSPHRASE_REQUIRED, PROPERTY_INDEX_PAYMENT_URL, + PROPERTY_INDEX_PORTAL_URL, PROPERTY_INDEX_POWERED, PROPERTY_INDEX_PRL_VERSION, PROPERTY_INDEX_PROFILE, @@ -545,38 +551,39 @@ enum PropertyIndex { PROPERTY_INDEX_WIFI_PHY_MODE, }; -StringToEnum<PropertyIndex>::Pair property_index_table[] = { +StringToEnum<PropertyIndex>::Pair property_index_table[] = { { kActivationStateProperty, PROPERTY_INDEX_ACTIVATION_STATE }, { kActiveProfileProperty, PROPERTY_INDEX_ACTIVE_PROFILE }, { kAutoConnectProperty, PROPERTY_INDEX_AUTO_CONNECT }, { kAvailableTechnologiesProperty, PROPERTY_INDEX_AVAILABLE_TECHNOLOGIES }, + { kCarrierProperty, PROPERTY_INDEX_CARRIER }, { kCellularAllowRoamingProperty, PROPERTY_INDEX_CELLULAR_ALLOW_ROAMING }, - { kCellularApnProperty, PROPERTY_INDEX_CELLULAR_APN }, { kCellularApnListProperty, PROPERTY_INDEX_CELLULAR_APN_LIST }, + { kCellularApnProperty, PROPERTY_INDEX_CELLULAR_APN }, { kCellularLastGoodApnProperty, PROPERTY_INDEX_CELLULAR_LAST_GOOD_APN }, - { kCarrierProperty, PROPERTY_INDEX_CARRIER }, + { kCheckPortalListProperty, PROPERTY_INDEX_CHECK_PORTAL_LIST }, { kConnectableProperty, PROPERTY_INDEX_CONNECTABLE }, { kConnectedTechnologiesProperty, PROPERTY_INDEX_CONNECTED_TECHNOLOGIES }, { kDefaultTechnologyProperty, PROPERTY_INDEX_DEFAULT_TECHNOLOGY }, { kDeviceProperty, PROPERTY_INDEX_DEVICE }, { kDevicesProperty, PROPERTY_INDEX_DEVICES }, - { kEapIdentityProperty, PROPERTY_INDEX_EAP_IDENTITY }, - { kEapMethodProperty, PROPERTY_INDEX_EAP_METHOD }, - { kEapPhase2AuthProperty, PROPERTY_INDEX_EAP_PHASE_2_AUTH }, { kEapAnonymousIdentityProperty, PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY }, - { kEapClientCertProperty, PROPERTY_INDEX_EAP_CLIENT_CERT }, + { kEapCaCertIDProperty, PROPERTY_INDEX_EAP_CA_CERT_ID }, + { kEapCaCertNssProperty, PROPERTY_INDEX_EAP_CA_CERT_NSS }, + { kEapCaCertProperty, PROPERTY_INDEX_EAP_CA_CERT }, { kEapCertIDProperty, PROPERTY_INDEX_EAP_CERT_ID }, { kEapClientCertNssProperty, PROPERTY_INDEX_EAP_CLIENT_CERT_NSS }, - { kEapPrivateKeyProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY }, - { kEapPrivateKeyPasswordProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD }, + { kEapClientCertProperty, PROPERTY_INDEX_EAP_CLIENT_CERT }, + { kEapIdentityProperty, PROPERTY_INDEX_EAP_IDENTITY }, { kEapKeyIDProperty, PROPERTY_INDEX_EAP_KEY_ID }, - { kEapCaCertProperty, PROPERTY_INDEX_EAP_CA_CERT }, - { kEapCaCertIDProperty, PROPERTY_INDEX_EAP_CA_CERT_ID }, - { kEapCaCertNssProperty, PROPERTY_INDEX_EAP_CA_CERT_NSS }, - { kEapUseSystemCAsProperty, PROPERTY_INDEX_EAP_USE_SYSTEM_CAS }, - { kEapPinProperty, PROPERTY_INDEX_EAP_PIN }, - { kEapPasswordProperty, PROPERTY_INDEX_EAP_PASSWORD }, { kEapKeyMgmtProperty, PROPERTY_INDEX_EAP_KEY_MGMT }, + { kEapMethodProperty, PROPERTY_INDEX_EAP_METHOD }, + { kEapPasswordProperty, PROPERTY_INDEX_EAP_PASSWORD }, + { kEapPhase2AuthProperty, PROPERTY_INDEX_EAP_PHASE_2_AUTH }, + { kEapPinProperty, PROPERTY_INDEX_EAP_PIN }, + { kEapPrivateKeyPasswordProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD }, + { kEapPrivateKeyProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY }, + { kEapUseSystemCAsProperty, PROPERTY_INDEX_EAP_USE_SYSTEM_CAS }, { kEnabledTechnologiesProperty, PROPERTY_INDEX_ENABLED_TECHNOLOGIES }, { kErrorProperty, PROPERTY_INDEX_ERROR }, { kEsnProperty, PROPERTY_INDEX_ESN }, @@ -613,12 +620,14 @@ StringToEnum<PropertyIndex>::Pair property_index_table[] = { { kPassphraseProperty, PROPERTY_INDEX_PASSPHRASE }, { kPassphraseRequiredProperty, PROPERTY_INDEX_PASSPHRASE_REQUIRED }, { kPaymentURLProperty, PROPERTY_INDEX_PAYMENT_URL }, + { kPortalURLProperty, PROPERTY_INDEX_PORTAL_URL }, { kPoweredProperty, PROPERTY_INDEX_POWERED }, { kProfileProperty, PROPERTY_INDEX_PROFILE }, { kProfilesProperty, PROPERTY_INDEX_PROFILES }, { kProviderProperty, PROPERTY_INDEX_PROVIDER }, { kProxyConfigProperty, PROPERTY_INDEX_PROXY_CONFIG }, { kRoamingStateProperty, PROPERTY_INDEX_ROAMING_STATE }, + { kSIMLockStatusProperty, PROPERTY_INDEX_SIM_LOCK }, { kSaveCredentialsProperty, PROPERTY_INDEX_SAVE_CREDENTIALS }, { kScanningProperty, PROPERTY_INDEX_SCANNING }, { kSecurityProperty, PROPERTY_INDEX_SECURITY }, @@ -627,7 +636,6 @@ StringToEnum<PropertyIndex>::Pair property_index_table[] = { { kServicesProperty, PROPERTY_INDEX_SERVICES }, { kServingOperatorProperty, PROPERTY_INDEX_SERVING_OPERATOR }, { kSignalStrengthProperty, PROPERTY_INDEX_SIGNAL_STRENGTH }, - { kSIMLockStatusProperty, PROPERTY_INDEX_SIM_LOCK }, { kStateProperty, PROPERTY_INDEX_STATE }, { kSupportNetworkScanProperty, PROPERTY_INDEX_SUPPORT_NETWORK_SCAN }, { kTechnologyFamilyProperty, PROPERTY_INDEX_TECHNOLOGY_FAMILY }, @@ -2661,7 +2669,7 @@ class NetworkLibraryImplBase : public NetworkLibrary { typedef ObserverList<NetworkDeviceObserver> NetworkDeviceObserverList; typedef std::map<std::string, NetworkDeviceObserverList*> - NetworkDeviceObserverMap; + NetworkDeviceObserverMap; typedef std::map<std::string, Network*> NetworkMap; typedef std::map<std::string, int> PriorityMap; @@ -2732,6 +2740,7 @@ class NetworkLibraryImplBase : public NetworkLibrary { void DeleteNetworks(); void DeleteRememberedNetworks(); void DeleteDevice(const std::string& device_path); + void DeleteDeviceFromDeviceObserversMap(const std::string& device_path); // Profile management functions. void SetProfileType(Network* network, NetworkProfileType type); @@ -2888,6 +2897,9 @@ NetworkLibraryImplBase::~NetworkLibraryImplBase() { DeleteNetworks(); DeleteRememberedNetworks(); STLDeleteValues(&data_plan_map_); + STLDeleteValues(&device_map_); + STLDeleteValues(&network_device_observers_); + STLDeleteValues(&network_observers_); } ////////////////////////////////////////////////////////////////////////////// @@ -2977,6 +2989,17 @@ void NetworkLibraryImplBase::RemoveNetworkDeviceObserver( } } +void NetworkLibraryImplBase::DeleteDeviceFromDeviceObserversMap( + const std::string& device_path) { + // Delete all device observers associated with this device. + NetworkDeviceObserverMap::iterator map_iter = + network_device_observers_.find(device_path); + if (map_iter != network_device_observers_.end()) { + delete map_iter->second; + network_device_observers_.erase(map_iter); + } +} + ////////////////////////////////////////////////////////////////////////////// void NetworkLibraryImplBase::Lock() { @@ -3889,6 +3912,7 @@ void NetworkLibraryImplBase::DeleteDevice(const std::string& device_path) { NetworkDevice* device = found->second; device_map_.erase(found); delete device; + DeleteDeviceFromDeviceObserversMap(device_path); } //////////////////////////////////////////////////////////////////////////// @@ -4212,7 +4236,6 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase { // NetworkDevice list management functions. void UpdateNetworkDeviceList(const ListValue* devices); - void DeleteDeviceFromDeviceObserversMap(const std::string& device_path); void ParseNetworkDevice(const std::string& device_path, const DictionaryValue* info); @@ -4908,8 +4931,12 @@ void NetworkLibraryImplCros::NetworkManagerStatusChanged( UpdateNetworkDeviceList(vlist); break; } + case PROPERTY_INDEX_PORTAL_URL: + case PROPERTY_INDEX_CHECK_PORTAL_LIST: + // Currently we ignore PortalURL and CheckPortalList. + break; default: - LOG(WARNING) << "Unhandled key: " << key; + LOG(WARNING) << "Manager: Unhandled key: " << key; break; } base::TimeDelta delta = base::TimeTicks::Now() - start; @@ -5362,9 +5389,7 @@ void NetworkLibraryImplCros::NetworkDeviceUpdate( if (device_path) { if (!info) { // device no longer exists. - std::string device_str(device_path); - networklib->DeleteDevice(device_str); - networklib->DeleteDeviceFromDeviceObserversMap(device_str); + networklib->DeleteDevice(std::string(device_path)); } else { DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); @@ -5373,17 +5398,6 @@ void NetworkLibraryImplCros::NetworkDeviceUpdate( } } -void NetworkLibraryImplCros::DeleteDeviceFromDeviceObserversMap( - const std::string& device_path) { - // Delete all device observers associated with this device. - NetworkDeviceObserverMap::iterator map_iter = - network_device_observers_.find(device_path); - if (map_iter != network_device_observers_.end()) { - delete map_iter->second; - network_device_observers_.erase(map_iter); - } -} - void NetworkLibraryImplCros::ParseNetworkDevice( const std::string& device_path, const DictionaryValue* info) { NetworkDeviceMap::iterator found = device_map_.find(device_path); diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt index aa0b2b4..71b0c36 100644 --- a/tools/valgrind/memcheck/suppressions.txt +++ b/tools/valgrind/memcheck/suppressions.txt @@ -4096,16 +4096,6 @@ fun:_ZN12browser_sync12SyncerThread16DoSyncSessionJobERKNS0_14SyncSessionJobE } { - bug_79569 - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos18NetworkLibraryImpl12InitTestDataEv - fun:_ZN8chromeos18NetworkLibraryImplC1Ev - fun:_ZN8chromeos14NetworkLibrary7GetImplEb - fun:_ZN8chromeos11CrosLibrary7LibraryINS_14NetworkLibraryEE14GetDefaultImplEb - fun:_ZN8chromeos11CrosLibrary17GetNetworkLibraryEv -} -{ bug_79651 Memcheck:Leak ... @@ -4872,30 +4862,6 @@ fun:_ZN11MessageLoop21DeferOrRunPendingTaskERKNS_11PendingTaskE } { - bug_89684_a - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos22NetworkLibraryImplStub4InitEv - fun:_ZN8chromeos14NetworkLibrary7GetImplEb - fun:_ZN8chromeos11CrosLibrary7LibraryINS_14NetworkLibraryEE14GetDefaultImplEb - fun:_ZN8chromeos11CrosLibrary17GetNetworkLibraryEv -} -{ - bug_89684_b - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos22NetworkLibraryImplBase24AddNetworkDeviceObserverERKSsPNS_14NetworkLibrary21NetworkDeviceObserverE - fun:_ZN8chromeos17NetworkMenuButton28RefreshNetworkDeviceObserverEPNS_14NetworkLibraryE -} -{ - bug_89684_c - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos22NetworkLibraryImplBase18AddNetworkObserverERKSsPNS_14NetworkLibrary15NetworkObserverE - fun:_ZN8chromeos22ProxyConfigServiceImpl22OnActiveNetworkChangedEPNS_14NetworkLibraryEPKNS_7NetworkE - fun:_ZN8chromeos22ProxyConfigServiceImplC1Ev -} -{ bug_89785a Memcheck:Cond fun:_ZSt9has_facetISt8messagesIcEEbRKSt6locale |