chiark / gitweb /
networkd: netdev - introduce LINGER state and netdev_drop()
[elogind.git] / src / network / networkd-netdev.c
index ed4bc191f35e580862eaa8218feaa6897eeb0d51..c7bec74aa36fd5a8a875eb259bd30ea53767312b 100644 (file)
@@ -108,6 +108,19 @@ 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;
+
+        netdev_cancel_callbacks(netdev);
+
+        netdev_unref(netdev);
+
+        return;
+}
+
 int netdev_get(Manager *manager, const char *name, NetDev **ret) {
         NetDev *netdev;