
ok so the current bug is presenting likely because the data in the regions list differs from the actual data because it is mutated inside the loop
the _intent_ of the logic was to only use data from in front of the cursor, and only mutate data behind it. for idx in range(1, len(regions)): self.fsck() head0, prev0 = regions[idx-1] tail0 = self.q[head0+1] + head0 assert self.q[prev0] == head0 # <- head1, prev1 = regions[idx] tail1 = self.q[head1+1] + head1 assert self.q[prev1] == head1 self.fsck() if tail0 == head1: # remove region0 assert self._calc_unused() == unused if prev1 == head0: assert head1 != prev0 self.q[prev0] = head1 prev1 = prev0 else: assert self.q[head0] != prev0 self.q[prev0] = self.q[head0] assert self._calc_unused() == unused - (tail0 - head0) assert self.q[head1] != head0 self.q[head0] = self.q[head1] # set region0's next to region1's next self.q[head0+1] = tail1 - head0 # set region0's length to region0's + region1's assert head0 != prev1 self.q[prev1] = head0 # reseat region1 to be region0 + region1 assert self._calc_unused() == unused self.fsck() else: assert tail0 < head1 assert self._calc_unused() == unused but because it's a linked list dependencies can be arbitrarily intertwined without regard to sorted order