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 { } else {
// Modifying an existing default value. // 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) { if ((_flags & F_dconfig) != 0) {
// As a special exception, if the flags include F_dconfig, we // As a special exception, if the flags include F_dconfig, we
// don't report a warning for changing the default value, // don't report a warning for changing the default value,
@ -227,10 +234,9 @@ set_default_value(const string &default_value) {
} else { } else {
prc_cat->warning() prc_cat->warning()
<< "changing default value for ConfigVariable " << "changing default value for ConfigVariable "
<< get_name() << " from '" << _default_value->get_string_value() << get_name() << " from '" << orig_default_value
<< "' to '" << default_value << "'.\n"; << "' to '" << default_value << "'.\n";
} }
_default_value->set_string_value(default_value);
} }
} }
} }