mirror of
https://github.com/xcat2/xNBA.git
synced 2024-11-22 09:31:51 +00:00
[settings] Unregister the children when unregistering the parent
The DHCP settings registered as a child of the netdevice settings are not unregistered anywhere. This prevents the netdevice from being freed on shutdown. Fix by automatically unregistering any child settings when the parent settings are unregistered. Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
f033694356
commit
519a4be189
@ -459,15 +459,22 @@ int register_settings ( struct settings *settings, struct settings *parent ) {
|
||||
* @v settings Settings block
|
||||
*/
|
||||
void unregister_settings ( struct settings *settings ) {
|
||||
struct settings *child;
|
||||
struct settings *tmp;
|
||||
|
||||
/* Unregister child settings */
|
||||
list_for_each_entry_safe ( child, tmp, &settings->children, siblings ) {
|
||||
unregister_settings ( child );
|
||||
}
|
||||
|
||||
DBGC ( settings, "Settings %p (\"%s\") unregistered\n",
|
||||
settings, settings_name ( settings ) );
|
||||
|
||||
/* Remove from list of settings */
|
||||
ref_put ( settings->refcnt );
|
||||
ref_put ( settings->parent->refcnt );
|
||||
settings->parent = NULL;
|
||||
list_del ( &settings->siblings );
|
||||
ref_put ( settings->refcnt );
|
||||
|
||||
/* Apply potentially-updated settings */
|
||||
apply_settings();
|
||||
|
Loading…
Reference in New Issue
Block a user