summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-05-17 15:32:57 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-05-18 20:40:56 +0900
commit56001f023305ea99329e27141d6e6067596491a9 (patch)
treef7382314e2ad51cd90c2a0265a1abf42b47be8ed
parent63130eb36dc51e4fd50716c585f98ebe456ca7cf (diff)
downloadsystemd-56001f023305ea99329e27141d6e6067596491a9.tar.gz
network: also drop requests when link enters linger state
Otherwise, if link is removed, several references to the link in remain exist in requests.
-rw-r--r--src/network/networkd-link.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 67d01ac44d..b56c232eca 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -1771,6 +1771,17 @@ static void link_drop_from_master(Link *link, NetDev *netdev) {
link_unref(set_remove(master->slaves, link));
}
+static void link_drop_requests(Link *link) {
+ Request *req;
+
+ assert(link);
+ assert(link->manager);
+
+ ORDERED_SET_FOREACH(req, link->manager->request_queue)
+ if (req->link == link)
+ request_drop(req);
+}
+
static void link_drop(Link *link) {
if (!link)
return;
@@ -1782,6 +1793,8 @@ static void link_drop(Link *link) {
/* Drop all references from other links and manager. Note that async netlink calls may have
* references to the link, and they will be dropped when we receive replies. */
+ link_drop_requests(link);
+
link_free_carrier_maps(link);
if (link->network) {
@@ -2098,17 +2111,6 @@ static int link_drop_config(Link *link) {
return r;
}
-static void link_drop_requests(Link *link) {
- Request *req;
-
- assert(link);
- assert(link->manager);
-
- ORDERED_SET_FOREACH(req, link->manager->request_queue)
- if (req->link == link)
- request_drop(req);
-}
-
int link_configure(Link *link) {
int r;