avoid recursion crash

This commit is contained in:
David Rose 2010-05-07 00:06:48 +00:00
parent d3d778734d
commit 8c56527a49

View File

@ -217,7 +217,14 @@ set_default_value(const string &default_value) {
} else {
// Modifying an existing default value.
if (_default_value->get_string_value() != default_value) {
// We set the original default value first, to avoid infinite
// recursion when the config variable in question happens to be
// consulted in NotifyCategory::out() (for instance,
// notify-timestamp).
string orig_default_value = _default_value->get_string_value();
_default_value->set_string_value(default_value);
if (orig_default_value != default_value) {
if ((_flags & F_dconfig) != 0) {
// As a special exception, if the flags include F_dconfig, we
// don't report a warning for changing the default value,
@ -227,10 +234,9 @@ set_default_value(const string &default_value) {
} else {
prc_cat->warning()
<< "changing default value for ConfigVariable "
<< get_name() << " from '" << _default_value->get_string_value()
<< get_name() << " from '" << orig_default_value
<< "' to '" << default_value << "'.\n";
}
_default_value->set_string_value(default_value);
}
}
}