[gPXE-devel] [PATCH] [settings] Unregister the children when unregistering the parent
Joshua Oreman
oremanj at rwcr.net
Wed Jul 14 16:37:01 EDT 2010
2010/7/14 Piotr Jaroszyński <p.jaroszynski at gmail.com>:
> I have come up with this change when debugging netdevices not being
> free()d on shutdown(). The dhcppkt->settings registered in
> dhcp_request_rx() with netdev's settings as parent are not unregistered
> anywhere. That makes the netdevice's refcnt to stay >=0.
>
> Apart from that it also just seems to make sense to not leave parentless
> children settings around.
Looks good to me. Comments from anyone? If not I'll apply in 24 hours.
-- Josh
> ---
> src/core/settings.c | 8 +++++++-
> 1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/src/core/settings.c b/src/core/settings.c
> index 963bfd5..93ed2ea 100644
> --- a/src/core/settings.c
> +++ b/src/core/settings.c
> @@ -459,15 +459,21 @@ 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;
> +
> + 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();
> --
> 1.7.1
>
> _______________________________________________
> gPXE-devel mailing list
> gPXE-devel at etherboot.org
> http://etherboot.org/mailman/listinfo/gpxe-devel
>
More information about the gPXE-devel
mailing list