Make sure we don't use a connection's session if it is closed.
Remove session from connection on reset.
bool reply = false;
Session *s = (Session *)m->get_connection()->get_priv();
+ if (s && s->closed) {
+ s->put();
+ s = NULL;
+ }
if (!s) {
s = session_map.new_session(m->get_source_inst());
m->get_connection()->set_priv(s->get());
dout(10) << "reset/close on session " << s->inst << dendl;
session_map.remove_session(s);
s->put();
+
+ // remove from connection, too.
+ con->set_priv(NULL);
return true;
}
s->sub_map.clear();
s->item.remove_myself();
s->put();
+ s->closed = true;
}
Session *new_session(entity_inst_t i) {