mirror of
https://github.com/systemd/systemd.git
synced 2024-11-06 08:26:52 +03:00
networkd: netdev - introduce LINGER state and netdev_drop()
We need the LINGER state in case we still have references to the netdev after it has been dropped.
This commit is contained in:
parent
59cb64e625
commit
2cc7e981af
@ -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;
|
||||
|
||||
|
@ -76,6 +76,7 @@ typedef enum NetDevState {
|
||||
NETDEV_STATE_FAILED,
|
||||
NETDEV_STATE_CREATING,
|
||||
NETDEV_STATE_READY,
|
||||
NETDEV_STATE_LINGER,
|
||||
_NETDEV_STATE_MAX,
|
||||
_NETDEV_STATE_INVALID = -1,
|
||||
} NetDevState;
|
||||
@ -271,6 +272,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
|
||||
/* NetDev */
|
||||
|
||||
int netdev_load(Manager *manager);
|
||||
void netdev_drop(NetDev *netdev);
|
||||
|
||||
NetDev *netdev_unref(NetDev *netdev);
|
||||
NetDev *netdev_ref(NetDev *netdev);
|
||||
|
Loading…
Reference in New Issue
Block a user