@@ -88,25 +88,28 @@ struct CB_notify_Finish {
8888
8989struct CB_aio_linger_cancel {
9090 Objecter *objecter;
91- Objecter::LingerOp * linger_op;
91+ boost::intrusive_ptr< Objecter::LingerOp> linger_op;
9292
93- CB_aio_linger_cancel (Objecter *_objecter, Objecter::LingerOp *_linger_op)
94- : objecter(_objecter), linger_op(_linger_op)
93+ CB_aio_linger_cancel (Objecter *_objecter,
94+ boost::intrusive_ptr<Objecter::LingerOp> op)
95+ : objecter(_objecter), linger_op(std::move(op))
9596 {
9697 }
9798
9899 void operator ()() {
99- objecter->linger_cancel (linger_op);
100+ objecter->linger_cancel (linger_op. get () );
100101 }
101102};
102103
103104struct C_aio_linger_Complete : public Context {
104105 AioCompletionImpl *c;
105- Objecter::LingerOp * linger_op;
106+ boost::intrusive_ptr< Objecter::LingerOp> linger_op;
106107 bool cancel;
107108
108- C_aio_linger_Complete (AioCompletionImpl *_c, Objecter::LingerOp *_linger_op, bool _cancel)
109- : c(_c), linger_op(_linger_op), cancel(_cancel)
109+ C_aio_linger_Complete (AioCompletionImpl *_c,
110+ boost::intrusive_ptr<Objecter::LingerOp> op,
111+ bool _cancel)
112+ : c(_c), linger_op(std::move(op)), cancel(_cancel)
110113 {
111114 c->get ();
112115 }
@@ -115,7 +118,7 @@ struct C_aio_linger_Complete : public Context {
115118 if (cancel || r < 0 )
116119 boost::asio::defer (c->io ->client ->finish_strand ,
117120 CB_aio_linger_cancel (c->io ->objecter ,
118- linger_op));
121+ std::move ( linger_op) ));
119122
120123 c->lock .lock ();
121124 c->rval = r;
@@ -136,8 +139,9 @@ struct C_aio_notify_Complete : public C_aio_linger_Complete {
136139 bool finished = false ;
137140 int ret_val = 0 ;
138141
139- C_aio_notify_Complete (AioCompletionImpl *_c, Objecter::LingerOp *_linger_op)
140- : C_aio_linger_Complete(_c, _linger_op, false ) {
142+ C_aio_notify_Complete (AioCompletionImpl *_c,
143+ boost::intrusive_ptr<Objecter::LingerOp> op)
144+ : C_aio_linger_Complete(_c, std::move(op), false) {
141145 }
142146
143147 void handle_ack (int r) {
0 commit comments