From 79e16ce3bf734434081e57f1170333277830a592 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 24 Mar 2014 23:45:33 +0100 Subject: [PATCH] networkd: fix a couple of memory leaks --- src/libsystemd/sd-event/sd-event.c | 2 +- src/libsystemd/sd-rtnl/sd-rtnl.c | 6 ++++++ src/network/networkd-netdev.c | 5 +++++ src/network/networkd-network.c | 5 +++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index 4552f4dad..a4b67431e 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -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); diff --git a/src/libsystemd/sd-rtnl/sd-rtnl.c b/src/libsystemd/sd-rtnl/sd-rtnl.c index 551e95b59..695a2dacc 100644 --- a/src/libsystemd/sd-rtnl/sd-rtnl.c +++ b/src/libsystemd/sd-rtnl/sd-rtnl.c @@ -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; diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index cdf07ad70..e333c47b1 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -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); } diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 776a9d304..47fab4ecb 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -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); } -- 2.30.2