summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/settings.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/settings.c b/src/core/settings.c
index 427b9ed6..79fb8e72 100644
--- a/src/core/settings.c
+++ b/src/core/settings.c
@@ -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();