From: Greg Farnum Date: Thu, 4 Nov 2010 18:28:52 +0000 (-0700) Subject: objecter: add new wait_for_osd_map function. X-Git-Tag: v0.23~22^2~12^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=86d6e51e8bfa155cb1944954b457684a90c217fe;p=ceph.git objecter: add new wait_for_osd_map function. --- diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 21e2f8bb9eca..0fe4d65019b9 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -211,6 +211,20 @@ void Objecter::handle_osd_map(MOSDMap *m) monc->sub_got("osdmap", osdmap->get_epoch()); } +void Objecter::wait_for_osd_map() +{ + if (osdmap->get_epoch()) return; + Mutex lock(""); + Cond cond; + bool done; + lock.Lock(); + C_SafeCond *context = new C_SafeCond(&lock, &cond, &done, NULL); + waiting_for_map[0].push_back(pair(context, 0)); + while (!done) + cond.Wait(lock); + lock.Unlock(); +} + void Objecter::maybe_request_map() { diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 8826740ff5ac..75bdfc9b7f5a 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -468,6 +468,7 @@ public: void dispatch(Message *m); void handle_osd_op_reply(class MOSDOpReply *m); void handle_osd_map(class MOSDMap *m); + void wait_for_osd_map(); private: // low-level