manager: unrealize device again after failure

If the device was realized in _internal_activate_device() and the
activation failed to start, unrealize the device again so that it
doesn't stay around.

Fixes-test: @ovs_delete_connecting_interface

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2263
(cherry picked from commit 7242c478a1)
This commit is contained in:
Beniamino Galvani 2025-08-28 09:20:04 +02:00 committed by Íñigo Huguet
parent 7e1c72fa63
commit de46cf1ee9

View file

@ -5718,6 +5718,7 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
GError *local = NULL;
NMConnectionMultiConnect multi_connect;
const char *parent_spec;
gboolean did_realize = FALSE;
g_return_val_if_fail(NM_IS_MANAGER(self), FALSE);
g_return_val_if_fail(NM_IS_ACTIVE_CONNECTION(active), FALSE);
@ -5892,6 +5893,7 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
nm_device_get_iface(device));
return FALSE;
}
did_realize = TRUE;
}
}
@ -5923,7 +5925,7 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
"The controller connection '%s' is not compatible with '%s'",
nm_settings_connection_get_id(controller_connection),
nm_settings_connection_get_id(sett_conn));
return FALSE;
goto err_unrealize;
}
if (!controller_ac) {
@ -5946,7 +5948,7 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
"Controller connection '%s' can't be activated: ",
nm_settings_connection_get_id(controller_connection));
}
return FALSE;
goto err_unrealize;
}
}
@ -6040,7 +6042,7 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
NM_MANAGER_ERROR,
NM_MANAGER_ERROR_DEPENDENCY_FAILED,
"Activation failed because the device is unmanaged");
return FALSE;
goto err_unrealize;
}
}
@ -6048,6 +6050,11 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
active_connection_add(self, active);
nm_device_queue_activation(device, NM_ACT_REQUEST(active));
return TRUE;
err_unrealize:
if (did_realize)
nm_device_unrealize(device, TRUE, NULL);
return FALSE;
}
static gboolean