Freeze all tracked objects (move to permanent generation). Lock order: generation_lists[i] → permanent_list (consistent with unfreeze).
(&self)
| 790 | /// Freeze all tracked objects (move to permanent generation). |
| 791 | /// Lock order: generation_lists[i] → permanent_list (consistent with unfreeze). |
| 792 | pub fn freeze(&self) { |
| 793 | let mut count = 0usize; |
| 794 | |
| 795 | for (gen_idx, gen_list) in self.generation_lists.iter().enumerate() { |
| 796 | let mut list = gen_list.write(); |
| 797 | let mut perm = self.permanent_list.write(); |
| 798 | while let Some(ptr) = list.pop_front() { |
| 799 | perm.push_front(ptr); |
| 800 | unsafe { ptr.as_ref().set_gc_generation(GC_PERMANENT) }; |
| 801 | count += 1; |
| 802 | } |
| 803 | self.generations[gen_idx].count.store(0, Ordering::SeqCst); |
| 804 | } |
| 805 | |
| 806 | self.permanent.count.fetch_add(count, Ordering::SeqCst); |
| 807 | } |
| 808 | |
| 809 | /// Unfreeze all objects (move from permanent to gen2). |
| 810 | /// Lock order: generation_lists[2] → permanent_list (consistent with freeze). |
no test coverage detected