]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
monclient: clean up old version_requests on session reset
authorSage Weil <sage@newdream.net>
Mon, 3 Oct 2011 22:29:16 +0000 (15:29 -0700)
committerSage Weil <sage@newdream.net>
Tue, 4 Oct 2011 20:44:54 +0000 (13:44 -0700)
This throws out the old contexts.  We assume that the caller will not wait
for them.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mon/MonClient.cc
src/osdc/Objecter.cc

index 6edd1cf8cdb344f09fa08b2c023a7804046ffb0f..edfb985d4ce17fabddd6d973a9b249136823ed02 100644 (file)
@@ -540,6 +540,12 @@ void MonClient::_reopen_session()
     waiting_for_session.pop_front();
   }
 
+  // throw out version check requests
+  while (!version_requests.empty()) {
+    version_requests.begin()->second->context->complete(-1);  // watch out for deadlock
+    version_requests.erase(version_requests.begin());
+  }
+
   // restart authentication handshake
   state = MC_STATE_NEGOTIATING;
 
index 2fba9b7d245d75b5210977817bd21897b11444fb..fabd9f250fdfffdcfb2da9034cd3e59d7a5be4a9 100644 (file)
@@ -351,6 +351,9 @@ void Objecter::handle_osd_map(MOSDMap *m)
 
 void Objecter::C_Op_Map_Latest::finish(int r)
 {
+  if (r < 0)
+    return;
+
   map<tid_t, Op*>::iterator iter =
     objecter->check_latest_map_ops.find(tid);
   if (iter == objecter->check_latest_map_ops.end()) {
@@ -375,6 +378,9 @@ void Objecter::C_Op_Map_Latest::finish(int r)
 
 void Objecter::C_Linger_Map_Latest::finish(int r)
 {
+  if (r < 0)
+    return;
+
   map<uint64_t, LingerOp*>::iterator iter =
     objecter->check_latest_map_lingers.find(linger_id);
   if (iter == objecter->check_latest_map_lingers.end()) {