The MetaRequest is a refcounted object. On construction, it will default ref to 1.
The general process to make an MDS request will be:
MetaRequest *req = new MetaRequest(op);
// fill in something
int r = make_request(req, uid, gid, target);
return r;
As mentioned, make_request() will put the passed request before returning(and thereby
delete the request automatically).
To be more specific here, the make_request() will call "mds_requests[tid] = request->get();"
to keep the request well local tracked on entry(which raises the ref of request to 2).
And on error exit(especially for the following no reply is received case), by calling both
, it will decrease the reference of the corresponding request to zero and thereby delete request.
Therefore the call to request thereafter is at risk of "access violation".