[pypy-commit] pypy concurrent-marksweep: Debugging help.
arigo
noreply at buildbot.pypy.org
Tue Oct 11 15:40:43 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: concurrent-marksweep
Changeset: r47938:f76373db4645
Date: 2011-10-11 15:40 +0200
http://bitbucket.org/pypy/pypy/changeset/f76373db4645/
Log: Debugging help.
diff --git a/pypy/rpython/lltypesystem/llmemory.py b/pypy/rpython/lltypesystem/llmemory.py
--- a/pypy/rpython/lltypesystem/llmemory.py
+++ b/pypy/rpython/lltypesystem/llmemory.py
@@ -411,14 +411,21 @@
self.ptr = ptr
def __repr__(self):
+ x = ''
if self.ptr is None:
s = 'NULL'
else:
+ from pypy.rpython.lltypesystem import llarena
+ try:
+ addr = llarena.getfakearenaaddress(self)
+ x = '(%s + %d) ' % (addr.arena, addr.offset)
+ except Exception:
+ pass
#try:
# s = hex(self.ptr._cast_to_int())
#except:
s = str(self.ptr)
- return '<fakeaddr %s>' % (s,)
+ return '<fakeaddr %s%s>' % (x, s)
def __add__(self, other):
if isinstance(other, AddressOffset):
diff --git a/pypy/rpython/memory/gc/concurrentms.py b/pypy/rpython/memory/gc/concurrentms.py
--- a/pypy/rpython/memory/gc/concurrentms.py
+++ b/pypy/rpython/memory/gc/concurrentms.py
@@ -230,6 +230,7 @@
obj = self.grow_reservation(result, totalsize)
hdr = self.header(obj)
hdr.tid = self.combine(typeid, self.current_mark, 0)
+ #debug_print("malloc_fixedsize_clear", obj)
return llmemory.cast_adr_to_ptr(obj, llmemory.GCREF)
#
return self._malloc_slowpath(typeid, size)
@@ -269,6 +270,7 @@
hdr = self.header(obj)
hdr.tid = self.combine(typeid, self.current_mark, 0)
(obj + offset_to_length).signed[0] = length
+ #debug_print("malloc_varsize_clear", obj)
return llmemory.cast_adr_to_ptr(obj, llmemory.GCREF)
#
# If the total size of the object would be larger than
@@ -360,6 +362,7 @@
hdr.tid = self.combine(typeid, self.current_mark, 0)
#
obj = result + size_gc_header
+ #debug_print("malloc_slowpath", obj)
return llmemory.cast_adr_to_ptr(obj, llmemory.GCREF)
#
_malloc_slowpath._dont_inline_ = True
@@ -472,6 +475,8 @@
mark = self.header(addr_struct).tid & 0xFF
if mark != self.current_mark:
self.force_scan(addr_struct)
+ #else:
+ # debug_print("deletion_barrier (off)", addr_struct)
def assume_young_pointers(self, addr_struct):
pass # XXX
@@ -479,7 +484,9 @@
def _init_writebarrier_logic(self):
#
def force_scan(obj):
+ #debug_print("deletion_barrier ON ", obj)
self.acquire(self.mutex_lock)
+ #debug_print("...main thread has mutex_lock")
mark = self.header(obj).tid & 0xFF
if mark != self.current_mark:
#
@@ -504,6 +511,7 @@
self.trace(obj, self._barrier_add_extra, None)
#
self.release(self.mutex_lock)
+ #debug_print("deletion_barrier done ", obj)
#
force_scan._dont_inline_ = True
self.force_scan = force_scan
@@ -520,7 +528,7 @@
#
self.acquire(self.finished_lock)
self.collection_running = 0
- debug_print("collection_running = 0")
+ #debug_print("collection_running = 0")
#
# Check invariants
ll_assert(not self.extra_objects_to_mark.non_empty(),
@@ -624,7 +632,9 @@
while p != self.NULL:
x = llmemory.cast_ptr_to_adr(p)
x = llarena.getfakearenaaddress(x) + 8
- self.gray_objects.append(x + self.gcheaderbuilder.size_gc_header)
+ obj = x + self.gcheaderbuilder.size_gc_header
+ #debug_print("_objects_with_finalizers_to_run", obj)
+ self.gray_objects.append(obj)
p = list_next(p)
#
# Invert this global variable, which has the effect that on all
@@ -649,16 +659,18 @@
#
# Start the collector thread
self.collection_running = 1
- debug_print("collection_running = 1")
+ #debug_print("collection_running = 1")
self.release(self.ready_to_start_lock)
#
debug_stop("gc-start")
def _add_stack_root(self, root):
obj = root.address[0]
+ #debug_print("_add_stack_root", obj)
self.gray_objects.append(obj)
def _add_prebuilt_root(self, obj, ignored):
+ #debug_print("_add_prebuilt_root", obj)
self.gray_objects.append(obj)
def debug_check_lists(self):
@@ -743,7 +755,7 @@
# Mark
self.collector_mark()
self.collection_running = 2
- debug_print("collection_running = 2")
+ #debug_print("collection_running = 2")
#
self.deal_with_objects_with_finalizers()
#
@@ -752,7 +764,7 @@
#
# Done!
self.collection_running = -1
- debug_print("collection_running = -1")
+ #debug_print("collection_running = -1")
self.release(self.finished_lock)
@@ -783,6 +795,7 @@
# There are typically only a few objects to move here,
# unless XXX we've hit the write barrier of a large array
self.acquire(self.mutex_lock)
+ #debug_print("...collector thread has mutex_lock")
while self.extra_objects_to_mark.non_empty():
obj = self.extra_objects_to_mark.pop()
self.gray_objects.append(obj)
@@ -858,6 +871,7 @@
def _collect_sweep_pages(self, n):
# sweep all pages from the linked list starting at 'page',
# containing objects of fixed size 'object_size'.
+ size_gc_header = self.gcheaderbuilder.size_gc_header
page = self.collect_pages[n]
object_size = n << WORD_POWER_2
linked_list = self.NULL
@@ -879,6 +893,7 @@
# part of a linked list of free locations), and moreover
# the object is still not marked. Free it by inserting
# it into the linked list.
+ #debug_print("sweeps", adr + size_gc_header)
llarena.arena_reset(adr, object_size, 0)
llarena.arena_reserve(adr, self.HDRSIZE)
hdr = llmemory.cast_adr_to_ptr(adr, self.HDRPTR)
@@ -903,7 +918,6 @@
type_id = llop.extract_high_ushort(llgroup.HALFWORD, tid)
wroffset = self.weakpointer_offset(type_id)
if wroffset >= 0:
- size_gc_header = self.gcheaderbuilder.size_gc_header
obj = adr + size_gc_header
pointing_to = (obj + wroffset).address[0]
if pointing_to != llmemory.NULL:
More information about the pypy-commit
mailing list