summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/ccd_config.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/common/ccd_config.c b/common/ccd_config.c
index 8569ab6beb..8896e9cde6 100644
--- a/common/ccd_config.c
+++ b/common/ccd_config.c
@@ -369,8 +369,7 @@ static void ccd_load_config(void)
CPRINTS("CCD using default config");
ccd_reset_config(CCD_RESET_TEST_LAB);
}
- ccd_config_loaded = 1;
- return;
+ goto ccd_is_loaded;
}
/* Copy the tuple data */
@@ -388,6 +387,7 @@ static void ccd_load_config(void)
ccd_reset_config(t->val_len < 2 ? CCD_RESET_TEST_LAB : 0);
}
+ccd_is_loaded:
ccd_config_loaded = 1;
/* Notify CCD users of configuration change */
@@ -410,8 +410,14 @@ static int ccd_save_config(void)
rv = writevars();
- /* Notify CCD users of configuration change */
- hook_notify(HOOK_CCD_CHANGE);
+ /*
+ * Notify CCD users of configuration change.
+ * Protect this notify with the ccd_config_loaded flag so recipients of
+ * HOOK_CCD_CHANGE don't call ccd_get/ccd_set before the CCD
+ * initialization is complete.
+ */
+ if (ccd_config_loaded)
+ hook_notify(HOOK_CCD_CHANGE);
return rv;
}