diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2011-08-03 19:04:24 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-08-03 19:04:24 +0200 |
commit | bed1650a98c998447ae085d9f4e882554c62a7cc (patch) | |
tree | 35e889cac4256170444912c2b97a065faca8a494 /src/device.c | |
parent | a669c62a2f99a01b42372e7c89c9496c0d8e3176 (diff) | |
download | connman-bed1650a98c998447ae085d9f4e882554c62a7cc.tar.gz connman-bed1650a98c998447ae085d9f4e882554c62a7cc.tar.bz2 connman-bed1650a98c998447ae085d9f4e882554c62a7cc.zip |
device: Free network after resetting service
After g_hash_table_remove(device->networks, identifier); the previously
cached service pointer can be invalid.
Bug reported by: Daniel Wagner <daniel.wagner@bmw-carit.de>
Diffstat (limited to 'src/device.c')
-rw-r--r-- | src/device.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/device.c b/src/device.c index e5bd84db..a3718a95 100644 --- a/src/device.c +++ b/src/device.c @@ -1117,11 +1117,13 @@ int connman_device_remove_network(struct connman_device *device, service = __connman_service_lookup_from_network(network); identifier = connman_network_get_identifier(network); - g_hash_table_remove(device->networks, identifier); + g_hash_table_steal(device->networks, identifier); if (service != NULL) __connman_service_reset_from_networks(service, device->networks); + free_network(network); + return 0; } |