#include "messages/MCommandReply.h"
#include "messages/MOSDMap.h"
#include "messages/MClientQuota.h"
-#include "messages/MClientCapRelease.h"
#include "messages/MMDSMap.h"
#include "messages/MFSMap.h"
#include "messages/MFSMapUser.h"
session->readonly = false;
- if (session->release) {
- session->release->put();
- session->release = NULL;
- }
+ session->release.reset();
// reset my cap seq number
session->seq = 0;
p->first)) {
if (cct->_conf->client_inject_release_failure) {
ldout(cct, 20) << __func__ << " injecting failure to send cap release message" << dendl;
- p->second->release->put();
} else {
p->second->con->send_message(p->second->release);
}
- p->second->release = 0;
+ p->second->release.reset();
}
}
}
class MClientRequestForward;
struct MClientLease;
class MClientCaps;
-class MClientCapRelease;
struct DirStat;
struct LeaseStat;
f->dump_string("state", get_state_name());
}
-MetaSession::~MetaSession()
-{
- if (release)
- release->put();
-}
-
void MetaSession::enqueue_cap_release(inodeno_t ino, uint64_t cap_id, ceph_seq_t iseq,
ceph_seq_t mseq, epoch_t osd_barrier)
{
if (!release) {
- release = new MClientCapRelease;
+ release.reset(new MClientCapRelease, false);
}
if (osd_barrier > release->osd_epoch_barrier) {
#include "include/types.h"
#include "include/utime.h"
-#include "msg/Message.h"
#include "include/xlist.h"
#include "mds/mdstypes.h"
+#include "messages/MClientCapRelease.h"
struct Cap;
struct Inode;
struct CapSnap;
struct MetaRequest;
-class MClientCapRelease;
struct MetaSession {
mds_rank_t mds_num;
std::set<ceph_tid_t> flushing_caps_tids;
std::set<Inode*> early_flushing_caps;
- MClientCapRelease *release;
+ boost::intrusive_ptr<MClientCapRelease> release;
MetaSession()
: mds_num(-1), con(NULL),
seq(0), cap_gen(0), cap_renew_seq(0), num_caps(0),
- state(STATE_NEW), mds_state(0), readonly(false),
- release(NULL)
+ state(STATE_NEW), mds_state(0), readonly(false)
{}
- ~MetaSession();
const char *get_state_name() const;
* @return 0 on success, or -errno on failure.
*/
virtual int send_message(Message *m) = 0;
+
+ int send_message(boost::intrusive_ptr<Message> m)
+ {
+ return send_message(m.detach()); /* send_message(Message *m) consumes a reference */
+ }
+
/**
* Send a "keepalive" ping along the given Connection, if it's working.
* If the underlying connection has broken, this function does nothing.