xlist is not copyable.
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
void MDSMonitor::check_subs()
{
string type = "mdsmap";
- xlist<Subscription*>::iterator p = mon->session_map.subs[type].begin();
+ if (mon->session_map.subs.count(type) == 0)
+ return;
+ xlist<Subscription*>::iterator p = mon->session_map.subs[type]->begin();
while (!p.end()) {
Subscription *sub = *p;
++p;
for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++)
delete *p;
//clean out MonSessionMap's subscriptions
- for (map<string, xlist<Subscription*> >::iterator i
+ for (map<string, xlist<Subscription*>* >::iterator i
= session_map.subs.begin();
i != session_map.subs.end();
++i) {
- while (!i->second.empty()) {
- session_map.remove_sub(i->second.front());
- }
+ while (!i->second->empty())
+ session_map.remove_sub(i->second->front());
+ delete i->second;
}
//clean out MonSessionMap's sessions
while (!session_map.sessions.empty()) {
void Monitor::check_subs()
{
string type = "monmap";
- xlist<Subscription*>::iterator p = session_map.subs[type].begin();
+ if (session_map.subs.count(type) == 0)
+ return;
+ xlist<Subscription*>::iterator p = session_map.subs[type]->begin();
while (!p.end()) {
Subscription *sub = *p;
++p;
void OSDMonitor::check_subs()
{
string type = "osdmap";
- xlist<Subscription*>::iterator p = mon->session_map.subs[type].begin();
+ if (mon->session_map.subs.count(type) == 0)
+ return;
+ xlist<Subscription*>::iterator p = mon->session_map.subs[type]->begin();
while (!p.end()) {
Subscription *sub = *p;
++p;
struct MonSessionMap {
xlist<MonSession*> sessions;
- map<string, xlist<Subscription*> > subs;
+ map<string, xlist<Subscription*>* > subs;
multimap<int, MonSession*> by_osd;
void remove_session(MonSession *s) {
} else {
sub = new Subscription(s, what);
s->sub_map[what] = sub;
- subs[what].push_back(&sub->type_item);
+
+ if (!subs.count(what))
+ subs[what] = new xlist<Subscription*>;
+ subs[what]->push_back(&sub->type_item);
}
sub->next = start;
sub->onetime = onetime;