Author: fijal
Branch: nogil-unsafe-2
Changeset: r91862:ac0c77ebd152
Date: 2017-07-11 17:02 +0200
http://bitbucket.org/pypy/pypy/changeset/ac0c77ebd152/
Log: (fijal, arigo) fix walking stack roots
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -418,7 +418,8 @@
def __init__(self, config=None):
"Basic initialization of objects."
self.fromcache = InternalSpaceCache(self).getorbuild
- self.threadlocals = ThreadLocals()
+ self.threadlocals = ThreadLocals() # this value is replaces
+ # if compiled with threads enabled, see pypy/module/thread/__init__.py
# set recursion limit
# sets all the internal descriptors
if config is None:
diff --git a/rpython/memory/gctransform/shadowstack.py
b/rpython/memory/gctransform/shadowstack.py
--- a/rpython/memory/gctransform/shadowstack.py
+++ b/rpython/memory/gctransform/shadowstack.py
@@ -96,14 +96,8 @@
return top
self.decr_stack = decr_stack
- def walk_stack_root(callback, start, end):
- gc = self.gc
- addr = end
- while addr != start:
- addr -= sizeofaddr
- if gc.points_to_valid_gc_object(addr):
- callback(gc, addr)
- self.rootstackhook = walk_stack_root
+ self.invoke_collect_stack_root = specialize.call_location()(
+ lambda arg0, arg1, addr: arg0(self.gc, addr))
from rpython.rlib.debug import ll_assert, debug_print, debug_start,
debug_stop
def walk_thread_stack(collect_stack_root, tl):
@@ -117,7 +111,9 @@
# without barriers)
return
debug_print("walk_stack", base, top)
- self.rootstackhook(collect_stack_root, base, top)
+ walk_stack_root(self.invoke_collect_stack_root, collect_stack_root,
+ None, base, top, is_minor=False)
+
self._walk_thread_stack = walk_thread_stack
def push_stack(self, addr):
@@ -152,13 +148,6 @@
if tl_shadowstack.get_or_make_raw() == llmemory.NULL:
allocate_shadow_stack()
-
- def thread_start():
- allocate_shadow_stack()
- tl_synclock.get_or_make_raw() # reference the field at least once
-
- thread_start._always_inline_ = True
-
def allocate_shadow_stack():
root_stack_depth = 163840
root_stack_size = sizeofaddr * root_stack_depth
@@ -182,7 +171,7 @@
self.thread_setup = thread_setup
self.thread_run_ptr = getfn(thread_run, [], annmodel.s_None,
minimal_transform=False)
- self.thread_start_ptr = getfn(thread_start, [], annmodel.s_None,
+ self.thread_start_ptr = getfn(thread_setup, [], annmodel.s_None,
minimal_transform=False)
self.thread_die_ptr = getfn(thread_die, [], annmodel.s_None,
minimal_transform=False)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit