mirror of
https://github.com/matrix-construct/construct
synced 2024-09-28 11:48:54 +02:00
ircd:Ⓜ️:vm: Improve release sequencing.
This commit is contained in:
parent
61942819f2
commit
b4a16c6678
1 changed files with 22 additions and 4 deletions
|
@ -617,19 +617,37 @@ ircd::m::vm::execute_pdu(eval &eval,
|
|||
{
|
||||
sequence::dock.wait([&eval]
|
||||
{
|
||||
return eval::seqnext(sequence::retired) == &eval;
|
||||
return eval::seqnext(sequence::retired) == std::addressof(eval);
|
||||
});
|
||||
|
||||
const auto highest
|
||||
{
|
||||
std::max(eval.sequence_shared[1], sequence::get(eval))
|
||||
};
|
||||
|
||||
const auto retire
|
||||
{
|
||||
std::clamp
|
||||
(
|
||||
sequence::get(eval),
|
||||
sequence::retired + 1,
|
||||
highest
|
||||
)
|
||||
};
|
||||
|
||||
log::debug
|
||||
{
|
||||
log, "%s | retire %lu:%lu",
|
||||
log, "%s | retire %lu:%lu release %lu",
|
||||
loghead(eval),
|
||||
sequence::get(eval),
|
||||
eval.sequence_shared[1],
|
||||
retire,
|
||||
highest,
|
||||
};
|
||||
|
||||
assert(sequence::get(eval) <= retire);
|
||||
assert(sequence::retired < sequence::get(eval));
|
||||
sequence::retired = std::max(eval.sequence_shared[1], sequence::get(eval));
|
||||
assert(sequence::retired < retire);
|
||||
sequence::retired = retire;
|
||||
}
|
||||
|
||||
return fault::ACCEPT;
|
||||
|
|
Loading…
Reference in a new issue