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

Unified Diff: chromeos_network.cc

Issue 1518024: Attempt to fix crashing bug. Added more logging. (Closed)
Patch Set: Created 10 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos_network.cc
diff --git a/chromeos_network.cc b/chromeos_network.cc
index 9b5a5b122074cfed48410cb0c1b6dbceb89411e1..ab8970bc672a8afad888cd65951909befc6c0fc6 100644
--- a/chromeos_network.cc
+++ b/chromeos_network.cc
@@ -236,7 +236,7 @@ bool GetProperties(const dbus::Proxy& proxy, glib::ScopedHashTable* result) {
::dbus_g_type_get_map("GHashTable", G_TYPE_STRING,
G_TYPE_VALUE),
&Resetter(result).lvalue(), G_TYPE_INVALID)) {
- LOG(WARNING) << "GetProperties failed: "
+ LOG(WARNING) << "GetProperties on path '" << proxy.path() << "' failed: "
<< (error->message ? error->message : "Unknown Error.");
return false;
}
@@ -508,12 +508,14 @@ bool ParseIPConfig(const char* path, IPConfig *ipconfig) {
extern "C"
IPConfigStatus* ChromeOSListIPConfigs(const char* device_path) {
+ if (!device_path)
+ return NULL;
dbus::BusConnection bus = dbus::GetSystemBusConnection();
dbus::Proxy device_proxy(bus,
- kConnmanServiceName,
- device_path,
- kConnmanDeviceInterface);
+ kConnmanServiceName,
+ device_path,
+ kConnmanDeviceInterface);
glib::ScopedHashTable properties;
if (!GetProperties(device_proxy, &properties)) {
@@ -529,17 +531,26 @@ IPConfigStatus* ChromeOSListIPConfigs(const char* device_path) {
static_cast<GPtrArray*>(g_value_get_boxed(static_cast<GValue*>(ptr)));
IPConfigStatus* result = new IPConfigStatus();
- result->size = ips_value->len;
+ std::vector<IPConfig> buffer;
+ const char* path = NULL;
+ for (size_t i = 0; i < ips_value->len; i++) {
+ path = static_cast<const char*>(g_ptr_array_index(ips_value, i));
+ if (!path) {
+ LOG(WARNING) << "Found NULL ip for device " << device_path;
+ continue;
+ }
+ IPConfig ipconfig = {};
+ if (!ParseIPConfig(path, &ipconfig))
+ continue;
+ buffer.push_back(ipconfig);
+ }
+ result->size = buffer.size();
if (result->size == 0) {
result->ips = NULL;
} else {
result->ips = new IPConfig[result->size];
- for (size_t i = 0; i < ips_value->len; i++) {
- const char* path =
- static_cast<const char*>(g_ptr_array_index(ips_value, i));
- ParseIPConfig(path, &result->ips[i]);
- }
}
+ std::copy(buffer.begin(), buffer.end(), result->ips);
return result;
}
@@ -650,13 +661,20 @@ bool ChromeOSRemoveIPConfig(IPConfig* config) {
}
void DeleteIPConfigProperties(IPConfig config) {
- delete config.path;
- delete config.address;
- delete config.broadcast;
- delete config.netmask;
- delete config.gateway;
- delete config.domainname;
- delete config.name_servers;
+ if (config.path)
+ delete config.path;
+ if (config.address)
+ delete config.address;
+ if (config.broadcast)
+ delete config.broadcast;
+ if (config.netmask)
+ delete config.netmask;
+ if (config.gateway)
+ delete config.gateway;
+ if (config.domainname)
+ delete config.domainname;
+ if (config.name_servers)
+ delete config.name_servers;
}
extern "C"
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698