summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-06-10 10:31:22 -0700
committerSage Weil <sage@inktank.com>2013-06-13 10:52:18 -0700
commit77db175c9d8b565e302393d785c3f350f1338aef (patch)
tree1165dc8ac84fa078affde204a94fd4f53aec2557
parent2818a44622f3190c89a774bbfcc36702d6b96720 (diff)
downloadceph-77db175c9d8b565e302393d785c3f350f1338aef.tar.gz
mon/MonClient: tear down version requests on shutdown
Make sure all callers can handle ECANCELED. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/mon/MonClient.cc8
-rw-r--r--src/osdc/Objecter.cc11
2 files changed, 13 insertions, 6 deletions
diff --git a/src/mon/MonClient.cc b/src/mon/MonClient.cc
index 181d0688311..b52ce603158 100644
--- a/src/mon/MonClient.cc
+++ b/src/mon/MonClient.cc
@@ -320,6 +320,14 @@ int MonClient::init()
void MonClient::shutdown()
{
+ monc_lock.Lock();
+ while (!version_requests.empty()) {
+ version_requests.begin()->second->context->complete(-ECANCELED);
+ delete version_requests.begin()->second;
+ version_requests.erase(version_requests.begin());
+ }
+ monc_lock.Unlock();
+
if (initialized) {
finisher.stop();
}
diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc
index 0afc56805ea..aae2159d69f 100644
--- a/src/osdc/Objecter.cc
+++ b/src/osdc/Objecter.cc
@@ -686,12 +686,11 @@ void Objecter::handle_osd_map(MOSDMap *m)
void Objecter::C_Op_Map_Latest::finish(int r)
{
+ if (r == -EAGAIN || r == -ECANCELED)
+ return;
+
lgeneric_subdout(objecter->cct, objecter, 10) << "op_map_latest r=" << r << " tid=" << tid
<< " latest " << latest << dendl;
- if (r == -EAGAIN) {
- // ignore callback; we will retry in resend_mon_ops()
- return;
- }
Mutex::Locker l(objecter->client_lock);
@@ -763,7 +762,7 @@ void Objecter::op_cancel_map_check(Op *op)
void Objecter::C_Linger_Map_Latest::finish(int r)
{
- if (r == -EAGAIN) {
+ if (r == -EAGAIN || r == -ECANCELED) {
// ignore callback; we will retry in resend_mon_ops()
return;
}
@@ -833,7 +832,7 @@ void Objecter::linger_cancel_map_check(LingerOp *op)
void Objecter::C_Command_Map_Latest::finish(int r)
{
- if (r == -EAGAIN) {
+ if (r == -EAGAIN || r == -ECANCELED) {
// ignore callback; we will retry in resend_mon_ops()
return;
}