void Objecter::handle_osd_map(MOSDMap *m)
{
- assert(initialized.read());
-
RWLock::WLocker wl(rwlock);
+ if (!initialized.read())
+ return;
assert(osdmap);
RWLock::RLocker rl(rwlock);
ldout(cct, 10) << "tick" << dendl;
+ if (!initialized.read())
+ return;
// we are only called by C_Tick
assert(tick_event);
/* This function DOES put the passed message before returning */
void Objecter::handle_osd_op_reply(MOSDOpReply *m)
{
- assert(initialized.read());
ldout(cct, 10) << "in handle_osd_op_reply" << dendl;
// get pio
int osd_num = (int)m->get_source().num();
RWLock::RLocker l(rwlock);
+ if (!initialized.read()) {
+ m->put();
+ return;
+ }
+
RWLock::Context lc(rwlock, RWLock::Context::TakenForRead);
map<int, OSDSession *>::iterator siter = osd_sessions.find(osd_num);
*/
void Objecter::handle_pool_op_reply(MPoolOpReply *m)
{
- assert(initialized.read());
-
rwlock.get_read();
+ if (!initialized.read()) {
+ rwlock.put_read();
+ m->put();
+ return;
+ }
ldout(cct, 10) << "handle_pool_op_reply " << *m << dendl;
ceph_tid_t tid = m->get_tid();
void Objecter::handle_get_pool_stats_reply(MGetPoolStatsReply *m)
{
- assert(initialized.read());
ldout(cct, 10) << "handle_get_pool_stats_reply " << *m << dendl;
ceph_tid_t tid = m->get_tid();
RWLock::WLocker wl(rwlock);
+ if (!initialized.read()) {
+ m->put();
+ return;
+ }
+
map<ceph_tid_t, PoolStatOp *>::iterator iter = poolstat_ops.find(tid);
if (iter != poolstat_ops.end()) {
PoolStatOp *op = poolstat_ops[tid];
void Objecter::handle_fs_stats_reply(MStatfsReply *m)
{
- assert(initialized.read());
-
RWLock::WLocker wl(rwlock);
+ if (!initialized.read()) {
+ m->put();
+ return;
+ }
ldout(cct, 10) << "handle_fs_stats_reply " << *m << dendl;
ceph_tid_t tid = m->get_tid();
if (osd >= 0) {
ldout(cct, 1) << "ms_handle_reset on osd." << osd << dendl;
rwlock.get_write();
+ if (!initialized.read()) {
+ rwlock.put_write();
+ return false;
+ }
map<int,OSDSession*>::iterator p = osd_sessions.find(osd);
if (p != osd_sessions.end()) {
OSDSession *session = p->second;
int osd_num = (int)m->get_source().num();
RWLock::WLocker wl(rwlock);
+ if (!initialized.read()) {
+ m->put();
+ return;
+ }
map<int, OSDSession *>::iterator siter = osd_sessions.find(osd_num);
if (siter == osd_sessions.end()) {