diff --git a/src/kern/smr.zig b/src/kern/smr.zig index ce76949..7ffaed3 100644 --- a/src/kern/smr.zig +++ b/src/kern/smr.zig @@ -274,6 +274,8 @@ pub fn deferred_advance(dom: *Domain) Sequence { /// Actually advance the global clock to a value previously returned by /// deferred_advance(). pub fn deferred_advance_commit(dom: *Domain, seq: Sequence) void { + if (seq == seq_invalid) return; + _ = dom.clock.write_seq.cmpxchgStrong( seq - seq_incr, seq, diff --git a/src/mm/zone.zig b/src/mm/zone.zig index 84bc29b..783c86a 100644 --- a/src/mm/zone.zig +++ b/src/mm/zone.zig @@ -792,6 +792,10 @@ pub const Zone = struct { // We lost the race. If the magazine we got was fully filled, // then put it in the depot. Otherwise, dispose of it. if (cnt == magazine_size.load()) { + // Ensure this magazine isn't counted as a freed one, + // it is instantly reclaimable. + nm.seq = ke.smr.seq_invalid; + Depot.free(nm, &cpu.depot.full_mags, self.reuse_policy); continue; }