if (commit_set_callback &&
ob->last_commit_tid == ob->last_write_tid) {
ob->uncommitted_item.remove_myself();
- if (uncommitted_by_ino[ob->get_ino()].empty()) { // no uncommitted in flight
- uncommitted_by_ino.erase(ob->get_ino());
- if (dirty_tx_by_ino[ob->get_ino()] == 0) // AND nothing dirty/tx
- commit_set_callback(flush_set_callback_arg, ob->get_ino());
+ inodeno_t ino = ob->get_ino();
+ if (ob->can_close())
+ close_object(ob);
+ if (uncommitted_by_ino[ino].empty()) { // no uncommitted in flight
+ uncommitted_by_ino.erase(ino);
+ if (dirty_tx_by_ino[ino] == 0) // AND nothing dirty/tx
+ commit_set_callback(flush_set_callback_arg, ino);
}
}
}
bool can_close() {
return data.empty() && lock_state == LOCK_NONE &&
waitfor_ack.empty() && waitfor_commit.empty() &&
- waitfor_rd.empty() && waitfor_wr.empty();
+ waitfor_rd.empty() && waitfor_wr.empty() &&
+ !uncommitted_item.is_on_xlist();
}
// bh