+ udev_monitor_unref(m->udev_monitor);
+ udev_unref(m->udev);
+ sd_bus_unref(m->bus);
+ sd_bus_slot_unref(m->prepare_for_sleep_slot);
+ sd_event_source_unref(m->udev_event_source);
+ sd_event_source_unref(m->bus_retry_event_source);
+ sd_event_unref(m->event);
+
+ while ((link = hashmap_first(m->links)))
+ link_unref(link);
+ hashmap_free(m->links);
+
+ while ((network = m->networks))
+ network_free(network);
+
+ hashmap_free(m->networks_by_name);
+
+ while ((netdev = hashmap_first(m->netdevs)))
+ netdev_unref(netdev);
+ hashmap_free(m->netdevs);
+
+ while ((pool = m->address_pools))
+ address_pool_free(pool);
+
+ sd_rtnl_unref(m->rtnl);
+
+ free(m);
+}
+
+static bool manager_check_idle(void *userdata) {
+ Manager *m = userdata;
+ Link *link;
+ Iterator i;
+
+ assert(m);
+
+ HASHMAP_FOREACH(link, m->links, i) {
+ /* we are not woken on udev activity, so let's just wait for the
+ * pending udev event */
+ if (link->state == LINK_STATE_PENDING)
+ return false;
+
+ if (!link->network)
+ continue;
+
+ /* we are not woken on netork activity, so let's stay around */
+ if (link_lldp_enabled(link) ||
+ link_ipv4ll_enabled(link) ||
+ link_dhcp4_server_enabled(link) ||
+ link_dhcp4_enabled(link) ||
+ link_dhcp6_enabled(link))
+ return false;