break;
case CEPH_SESSION_REQUEST_RENEWCAPS:
- mds->sessionmap.touch_session(session);
- if (session->is_stale()) {
- mds->sessionmap.set_state(session, Session::STATE_OPEN);
- mds->locker->resume_stale_caps(session);
+ if (session->is_closed()) {
+ dout(10) << "ignoring renewcaps on clsoed session" << dendl;
+ } else {
+ mds->sessionmap.touch_session(session);
+ if (session->is_stale()) {
+ mds->sessionmap.set_state(session, Session::STATE_OPEN);
+ mds->locker->resume_stale_caps(session);
+ }
+ mds->messenger->send_message(new MClientSession(CEPH_SESSION_RENEWCAPS, m->get_seq()),
+ session->inst);
}
- mds->messenger->send_message(new MClientSession(CEPH_SESSION_RENEWCAPS, m->get_seq()),
- session->inst);
break;
case CEPH_SESSION_REQUEST_CLOSE:
s->put();
}
void touch_session(Session *session) {
- by_state[session->state].push_back(&session->session_list_item);
- session->last_cap_renew = g_clock.now();
+ if (session->session_list_item.is_on_xlist()) {
+ by_state[session->state].push_back(&session->session_list_item);
+ session->last_cap_renew = g_clock.now();
+ } else {
+ assert(0); // hrm, should happen?
+ }
}
Session *get_oldest_session(int state) {
if (by_state[state].empty()) return 0;