X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-netdev.c;h=f742e391ce5b3cd1e790b62eb945b2292f296726;hb=5e273efec5fcf60ddb55e6bc0aaa850cb1be86c6;hp=ed4bc191f35e580862eaa8218feaa6897eeb0d51;hpb=59cb64e6253e445c78b9e78be5e27bae0015ea38;p=elogind.git diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index ed4bc191f..f742e391c 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -108,6 +108,21 @@ NetDev *netdev_ref(NetDev *netdev) { return netdev; } +void netdev_drop(NetDev *netdev) { + if (!netdev || netdev->state == NETDEV_STATE_LINGER) + return; + + netdev->state = NETDEV_STATE_LINGER; + + log_debug_netdev(netdev, "netdev removed"); + + netdev_cancel_callbacks(netdev); + + netdev_unref(netdev); + + return; +} + int netdev_get(Manager *manager, const char *name, NetDev **ret) { NetDev *netdev; @@ -204,8 +219,8 @@ static int netdev_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userda if (r == -EEXIST) log_debug_netdev(netdev, "netdev exists, using existing"); else if (r < 0) { - log_warning_netdev(netdev, "netdev failed: %s", strerror(-r)); - netdev_enter_failed(netdev); + log_warning_netdev(netdev, "netdev could not be greated: %s", strerror(-r)); + netdev_drop(netdev); return 1; }