]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: do not copy subscription xlist
authorSage Weil <sage.weil@dreamhost.com>
Mon, 20 Jun 2011 22:39:16 +0000 (15:39 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Tue, 21 Jun 2011 22:53:50 +0000 (15:53 -0700)
xlist is not copyable.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/mon/MDSMonitor.cc
src/mon/Monitor.cc
src/mon/OSDMonitor.cc
src/mon/Session.h

index d5c797eb83de3a0be1806839864e9e93caeae615..39186404550bef65213bc8dbc1db2b3f9a3a8733 100644 (file)
@@ -845,7 +845,9 @@ bool MDSMonitor::prepare_command(MMonCommand *m)
 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;
index 2baefb41286de86d4c70cb3a9accd04d3fc7db50..e3ad5e0f17c5389d8b0a5245a8a1c0923f371a59 100644 (file)
@@ -141,13 +141,13 @@ Monitor::~Monitor()
   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()) {
@@ -977,7 +977,9 @@ bool Monitor::ms_handle_reset(Connection *con)
 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;
index 63e09f81539287a3509dff14b54a9e86a1adb26f..a87a833f388075c11fe0606df3df51cd0f24dd7a 100644 (file)
@@ -952,7 +952,9 @@ epoch_t OSDMonitor::blacklist(entity_addr_t a, utime_t until)
 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;
index b4827d07b957563d6f0358a8f9eb002d19fe9a86..c6957a67e4b561f021a483b4142adf6de84f2c14 100644 (file)
@@ -73,7 +73,7 @@ struct MonSession : public RefCountedObject {
 
 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) {
@@ -126,7 +126,10 @@ struct MonSessionMap {
     } 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;