boost::lambda::_1, &m_image_ctx, m_object_size, m_snapc,
boost::lambda::_2));
AsyncObjectThrottle *throttle = new AsyncObjectThrottle(
- *this, context_factory, create_callback_context(), m_prog_ctx, 0,
+ *this, context_factory, create_callback_context(), &m_prog_ctx, 0,
m_overlap_objects);
throttle->start_ops(m_image_ctx.concurrent_management_ops);
}
AsyncObjectThrottle::AsyncObjectThrottle(const AsyncRequest& async_request,
const ContextFactory& context_factory,
- Context *ctx, ProgressContext &prog_ctx,
+ Context *ctx, ProgressContext *prog_ctx,
uint64_t object_no,
uint64_t end_object_no)
: m_lock("librbd::AsyncThrottle::m_lock"),
++m_current_ops;
done = true;
}
- m_prog_ctx.update_progress(ono, m_end_object_no);
+ if (m_prog_ctx != NULL) {
+ m_prog_ctx->update_progress(ono, m_end_object_no);
+ }
}
}
AsyncObjectThrottle(const AsyncRequest &async_request,
const ContextFactory& context_factory, Context *ctx,
- ProgressContext &prog_ctx, uint64_t object_no,
+ ProgressContext *prog_ctx, uint64_t object_no,
uint64_t end_object_no);
void start_ops(uint64_t max_concurrent);
const AsyncRequest &m_async_request;
ContextFactory m_context_factory;
Context *m_ctx;
- ProgressContext &m_prog_ctx;
+ ProgressContext *m_prog_ctx;
uint64_t m_object_no;
uint64_t m_end_object_no;
uint64_t m_current_ops;
boost::lambda::bind(boost::lambda::new_ptr<AsyncTrimObjectContext>(),
boost::lambda::_1, &m_image_ctx, boost::lambda::_2));
AsyncObjectThrottle *throttle = new AsyncObjectThrottle(
- *this, context_factory, ctx, m_prog_ctx, m_delete_start, m_num_objects);
+ *this, context_factory, ctx, &m_prog_ctx, m_delete_start, m_num_objects);
throttle->start_ops(m_image_ctx.concurrent_management_ops);
}
boost::lambda::bind(boost::lambda::new_ptr<C_VerifyObject>(),
boost::lambda::_1, &m_image_ctx, snap_id, boost::lambda::_2));
AsyncObjectThrottle *throttle = new AsyncObjectThrottle(
- *this, context_factory, create_callback_context(), m_prog_ctx, 0,
+ *this, context_factory, create_callback_context(), &m_prog_ctx, 0,
num_objects);
throttle->start_ops(cct->_conf->rbd_concurrent_management_ops);
}