chiark / gitweb /
networkd: fix a couple of memory leaks
authorLennart Poettering <lennart@poettering.net>
Mon, 24 Mar 2014 22:45:33 +0000 (23:45 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 24 Mar 2014 22:46:13 +0000 (23:46 +0100)
src/libsystemd/sd-event/sd-event.c
src/libsystemd/sd-rtnl/sd-rtnl.c
src/network/networkd-netdev.c
src/network/networkd-network.c

index 4552f4dad6994b3c94168adc0b7fbaaf55c76058..a4b67431ef66ffb97cb17a6afb065d6aa898ebf1 100644 (file)
@@ -2170,7 +2170,7 @@ _public_ int sd_event_run(sd_event *e, uint64_t timeout) {
                         r = flush_timer(e, e->boottime_alarm.fd, ev_queue[i].events, &e->boottime_alarm.next);
                 else if (ev_queue[i].data.ptr == INT_TO_PTR(SOURCE_SIGNAL))
                         r = process_signal(e, ev_queue[i].events);
-                else if (ev_queue[i].data.ptr ==  INT_TO_PTR(SOURCE_WATCHDOG))
+                else if (ev_queue[i].data.ptr == INT_TO_PTR(SOURCE_WATCHDOG))
                         r = flush_timer(e, e->watchdog_fd, ev_queue[i].events, NULL);
                 else
                         r = process_io(e, ev_queue[i].data.ptr, ev_queue[i].events);
index 551e95b592d87eb48a3e34a21cb3ed80f13e29d4..695a2daccf28a850c22bee911dc8192a29953b33 100644 (file)
@@ -178,6 +178,12 @@ sd_rtnl *sd_rtnl_unref(sd_rtnl *rtnl) {
                         }
 
                         safe_close(rtnl->fd);
+
+                        sd_event_source_unref(rtnl->io_event_source);
+                        sd_event_source_unref(rtnl->time_event_source);
+                        sd_event_source_unref(rtnl->exit_event_source);
+                        sd_event_unref(rtnl->event);
+
                         free(rtnl);
 
                         return NULL;
index cdf07ad704ad204797edf7beb0275b60170b69ba..e333c47b1f724659b63885c0ae82f8e86f8b6ebf 100644 (file)
@@ -67,6 +67,11 @@ void netdev_free(NetDev *netdev) {
         free(netdev->description);
         free(netdev->name);
 
+        condition_free_list(netdev->match_host);
+        condition_free_list(netdev->match_virt);
+        condition_free_list(netdev->match_kernel);
+        condition_free_list(netdev->match_arch);
+
         free(netdev);
 }
 
index 776a9d3040f75370ef399cb53232c5742feb5a95..47fab4ecb043defad9745664413f6c5573ac8c5d 100644 (file)
@@ -176,6 +176,11 @@ void network_free(Network *network) {
         if (network->manager && network->manager->networks)
                 LIST_REMOVE(networks, network->manager->networks, network);
 
+        condition_free_list(network->match_host);
+        condition_free_list(network->match_virt);
+        condition_free_list(network->match_kernel);
+        condition_free_list(network->match_arch);
+
         free(network);
 }