diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-05-17 15:32:57 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-05-18 20:40:56 +0900 |
commit | 56001f023305ea99329e27141d6e6067596491a9 (patch) | |
tree | f7382314e2ad51cd90c2a0265a1abf42b47be8ed | |
parent | 63130eb36dc51e4fd50716c585f98ebe456ca7cf (diff) | |
download | systemd-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.c | 24 |
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; |