2
0
mirror of https://github.com/xcat2/xNBA.git synced 2024-11-22 01:21:45 +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:
Piotr Jaroszyński 2010-07-14 22:25:55 +02:00 committed by Michael Brown
parent f033694356
commit 519a4be189

View File

@ -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();