There is a possibility of a race if the JournalTrimmer destructor is
waiting for an async op to complete but the op is flagged as complete
while the mutex is being held.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
trim_objects(object_set_position.object_number / splay_width);
}
}
- m_async_op_tracker.finish_op();
}
void JournalTrimmer::handle_set_removed(int r, uint64_t object_set) {
ldout(m_cct, 20) << "completing remove set context" << dendl;
m_remove_set_ctx->complete(r);
}
- m_async_op_tracker.finish_op();
}
JournalTrimmer::C_RemoveSet::C_RemoveSet(JournalTrimmer *_journal_trimmer,
virtual void finish(int r) {
journal_trimmer->handle_commit_position_safe(r, object_set_position);
+ journal_trimmer->m_async_op_tracker.finish_op();
}
};
struct C_RemoveSet : public Context {
virtual void complete(int r);
virtual void finish(int r) {
journal_trimmer->handle_set_removed(r, object_set);
+ journal_trimmer->m_async_op_tracker.finish_op();
}
};