summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoao Eduardo Luis <joao.luis@inktank.com>2013-08-09 14:48:15 -0700
committerJoao Eduardo Luis <joao.luis@inktank.com>2013-08-09 14:48:15 -0700
commit7ed6de9dd7aed59f3c5dd93e012cf080bcc36d8a (patch)
tree571e2547cab6054f0aee0c1d700c9dc742c87efb
parent068baae719b6a06487110e30b3cdcafddda0e579 (diff)
downloadceph-7ed6de9dd7aed59f3c5dd93e012cf080bcc36d8a.tar.gz
common: pick_addresses: fix bug with observer class that triggered #5205
The Observer class we defined to observe conf changes and thus avoid triggering #5205 (as fixed by eb86eebe1ba42f04b46f7c3e3419b83eb6fe7f9a), was returning always the same const static array, which would lead us to always populate the observer's list with an observer for 'public_addr'. This would of course become a problem when trying to obtain the observer for 'cluster_add' during md_config_t::set_val() -- thus triggering the same assert as initially reported on #5205. Backport: cuttlefish Fixes: #5205 Signed-off-by: Joao Eduardo Luis <jecluis@gmail.com> Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/common/pick_address.cc13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc
index ff036c61360..f6853622ff9 100644
--- a/src/common/pick_address.cc
+++ b/src/common/pick_address.cc
@@ -50,15 +50,14 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
// observe this change
struct Observer : public md_config_obs_t {
- const char *conf_var;
- Observer(const char *c) : conf_var(c) {}
+ const char *keys[2];
+ Observer(const char *c) {
+ keys[0] = c;
+ keys[1] = NULL;
+ }
const char** get_tracked_conf_keys() const {
- static const char *foo[] = {
- conf_var,
- NULL
- };
- return foo;
+ return (const char **)keys;
}
void handle_conf_change(const struct md_config_t *conf,
const std::set <std::string> &changed) {