Author: Maciej Fijalkowski <fij...@gmail.com> Branch: lightweight-finalizers Changeset: r47717:a71ab91a7f4c Date: 2011-09-30 11:16 -0300 http://bitbucket.org/pypy/pypy/changeset/a71ab91a7f4c/
Log: semispace support diff --git a/pypy/rpython/memory/gc/semispace.py b/pypy/rpython/memory/gc/semispace.py --- a/pypy/rpython/memory/gc/semispace.py +++ b/pypy/rpython/memory/gc/semispace.py @@ -82,6 +82,7 @@ self.free = self.tospace MovingGCBase.setup(self) self.objects_with_finalizers = self.AddressDeque() + self.objects_with_raw_mem = self.AddressDeque() self.objects_with_weakrefs = self.AddressStack() def _teardown(self): @@ -104,6 +105,8 @@ self.free = result + totalsize if has_finalizer: self.objects_with_finalizers.append(result + size_gc_header) + if self.has_raw_mem_ptr(typeid16): + self.objects_with_raw_mem.append(result + size_gc_header) if contains_weakptr: self.objects_with_weakrefs.append(result + size_gc_header) return llmemory.cast_adr_to_ptr(result+size_gc_header, llmemory.GCREF) @@ -265,6 +268,8 @@ scan = self.scan_copied(scan) if self.objects_with_finalizers.non_empty(): scan = self.deal_with_objects_with_finalizers(scan) + if self.objects_with_raw_mem.non_empty(): + self.deal_with_objects_with_raw_mem() if self.objects_with_weakrefs.non_empty(): self.invalidate_weakrefs() self.update_objects_with_id() @@ -523,6 +528,21 @@ self.objects_with_finalizers = new_with_finalizer return scan + def deal_with_objects_with_raw_mem(self): + new_with_raw_mem = self.AddressDeque() + while self.objects_with_raw_mem.non_empty(): + addr = self.objects_with_raw_mem.popleft() + if self.surviving(addr): + new_with_raw_mem.append(self.get_forwarding_address(addr)) + else: + typeid = self.get_type_id(addr) + p = (addr + self.ofs_to_raw_mem_ptr(typeid)).ptr[0] + if p: + lltype.free(p, flavor='raw') + self.objects_with_raw_mem.delete() + self.objects_with_raw_mem = new_with_raw_mem + + def _append_if_nonnull(pointer, stack): stack.append(pointer.address[0]) _append_if_nonnull = staticmethod(_append_if_nonnull) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit