|
@@ -524,19 +524,24 @@ void cfg_install_child_cb(cfg_child_cb_t *cb_first, cfg_child_cb_t *cb_last)
|
|
void cfg_install_global(cfg_block_t *block, char **replaced,
|
|
void cfg_install_global(cfg_block_t *block, char **replaced,
|
|
cfg_child_cb_t *cb_first, cfg_child_cb_t *cb_last)
|
|
cfg_child_cb_t *cb_first, cfg_child_cb_t *cb_last)
|
|
{
|
|
{
|
|
|
|
+ cfg_block_t* old_cfg;
|
|
|
|
+
|
|
|
|
+ CFG_REF(block);
|
|
|
|
+
|
|
CFG_LOCK();
|
|
CFG_LOCK();
|
|
|
|
|
|
- if (*cfg_global) {
|
|
|
|
- if (replaced) (*cfg_global)->replaced = replaced;
|
|
|
|
- CFG_UNREF(*cfg_global);
|
|
|
|
- }
|
|
|
|
- CFG_REF(block);
|
|
|
|
|
|
+ old_cfg = *cfg_global;
|
|
*cfg_global = block;
|
|
*cfg_global = block;
|
|
|
|
|
|
if (cb_first)
|
|
if (cb_first)
|
|
cfg_install_child_cb(cb_first, cb_last);
|
|
cfg_install_child_cb(cb_first, cb_last);
|
|
|
|
|
|
CFG_UNLOCK();
|
|
CFG_UNLOCK();
|
|
|
|
+
|
|
|
|
+ if (old_cfg) {
|
|
|
|
+ if (replaced) (old_cfg)->replaced = replaced;
|
|
|
|
+ CFG_UNREF(old_cfg);
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|