Fix rare crash in osd_peering due to callback ordering

This commit is contained in:
Vitaliy Filippov
2022-12-12 00:27:05 +03:00
parent 7a71e7ef01
commit 472bce58ab
+4 -4
View File
@@ -336,8 +336,8 @@ void osd_t::submit_sync_and_list_subop(osd_num_t role_osd, pg_peering_state_t *p
ps->list_ops.erase(role_osd); ps->list_ops.erase(role_osd);
submit_list_subop(role_osd, ps); submit_list_subop(role_osd, ps);
}; };
bs->enqueue_op(op->bs_op);
ps->list_ops[role_osd] = op; ps->list_ops[role_osd] = op;
bs->enqueue_op(op->bs_op);
} }
else else
{ {
@@ -371,8 +371,8 @@ void osd_t::submit_sync_and_list_subop(osd_num_t role_osd, pg_peering_state_t *p
ps->list_ops.erase(role_osd); ps->list_ops.erase(role_osd);
submit_list_subop(role_osd, ps); submit_list_subop(role_osd, ps);
}; };
msgr.outbox_push(op);
ps->list_ops[role_osd] = op; ps->list_ops[role_osd] = op;
msgr.outbox_push(op);
} }
} }
@@ -415,8 +415,8 @@ void osd_t::submit_list_subop(osd_num_t role_osd, pg_peering_state_t *ps)
op->bs_op = NULL; op->bs_op = NULL;
delete op; delete op;
}; };
bs->enqueue_op(op->bs_op);
ps->list_ops[role_osd] = op; ps->list_ops[role_osd] = op;
bs->enqueue_op(op->bs_op);
} }
else else
{ {
@@ -463,8 +463,8 @@ void osd_t::submit_list_subop(osd_num_t role_osd, pg_peering_state_t *ps)
ps->list_ops.erase(role_osd); ps->list_ops.erase(role_osd);
delete op; delete op;
}; };
msgr.outbox_push(op);
ps->list_ops[role_osd] = op; ps->list_ops[role_osd] = op;
msgr.outbox_push(op);
} }
} }