[pypy-commit] pypy stm-gc-2: Translation fixes and a "bah": can't seem to get a doubly-linked list
arigo
noreply at buildbot.pypy.org
Wed Apr 17 14:59:43 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: stm-gc-2
Changeset: r63444:55b694882862
Date: 2013-04-17 14:57 +0200
http://bitbucket.org/pypy/pypy/changeset/55b694882862/
Log: Translation fixes and a "bah": can't seem to get a doubly-linked
list implementation correct.
(stm/test/test_ztranslated.test_targetdemo)
diff --git a/rpython/memory/gc/stmgc.py b/rpython/memory/gc/stmgc.py
--- a/rpython/memory/gc/stmgc.py
+++ b/rpython/memory/gc/stmgc.py
@@ -203,14 +203,17 @@
llop.nop(lltype.Void, llhelper(self.stm_operations.DUPLICATE,
self._stm_duplicate))
#
+ self.ll_global_lock = rthread.null_ll_lock
self.sharedarea.setup()
#
self.linked_list_stmtls = None
- self.ll_global_lock = rthread.allocate_ll_lock()
#
self.stm_operations.descriptor_init()
self.stm_operations.begin_inevitable_transaction()
self.setup_thread()
+ #
+ # Now the gc is running, we can allocate this lock object
+ self.ll_global_lock = rthread.allocate_ll_lock()
def setup_thread(self):
"""Build the StmGCTLS object and start a transaction at the level
@@ -237,15 +240,22 @@
stmtls.delete()
def acquire_global_lock(self):
- rthread.acquire_NOAUTO(self.ll_global_lock, True)
+ if self.ll_global_lock:
+ rthread.acquire_NOAUTO(self.ll_global_lock, True)
def release_global_lock(self):
- rthread.release_NOAUTO(self.ll_global_lock)
+ if self.ll_global_lock:
+ rthread.release_NOAUTO(self.ll_global_lock)
def add_in_linked_list(self, stmtls):
self.acquire_global_lock()
+ stmnext = self.linked_list_stmtls
stmtls.linked_list_prev = None
- stmtls.linked_list_next = self.linked_list_stmtls
+ stmtls.linked_list_next = stmnext
+ if stmnext is not None:
+ ll_assert(stmnext.linked_list_prev is None,
+ "add_in_linked_list: bad linked list")
+ stmnext.linked_list_prev = stmtls
self.linked_list_stmtls = stmtls
self.release_global_lock()
@@ -254,9 +264,9 @@
c = 0
stmprev = stmtls.linked_list_prev
stmnext = stmtls.linked_list_next
- if stmnext:
+ if stmnext is not None:
stmnext.linked_list_prev = stmprev
- if stmprev:
+ if stmprev is not None:
stmprev.linked_list_next = stmnext
c += 1
if stmtls is self.linked_list_stmtls:
diff --git a/rpython/memory/gc/stmshared.py b/rpython/memory/gc/stmshared.py
--- a/rpython/memory/gc/stmshared.py
+++ b/rpython/memory/gc/stmshared.py
@@ -80,13 +80,7 @@
self.count_global_pages = 0
def setup(self):
- self.ll_global_lock = rthread.allocate_ll_lock()
-
- def acquire_global_lock(self):
- rthread.acquire_NOAUTO(self.ll_global_lock, True)
-
- def release_global_lock(self):
- rthread.release_NOAUTO(self.ll_global_lock)
+ pass
# ------------------------------------------------------------
@@ -239,7 +233,7 @@
them out.
"""
stmshared = self.sharedarea
- stmshared.acquire_global_lock()
+ stmshared.gc.acquire_global_lock()
i = stmshared.length - 1
while i >= 1:
lpage = self.pages_for_size[i]
@@ -250,7 +244,7 @@
stmshared.full_pages[i] = lpage
i -= 1
stmshared.count_global_pages += self.count_pages
- stmshared.release_global_lock()
+ stmshared.gc.release_global_lock()
def delete(self):
self.gift_all_pages_to_shared_area()
diff --git a/rpython/rlib/rthread.py b/rpython/rlib/rthread.py
--- a/rpython/rlib/rthread.py
+++ b/rpython/rlib/rthread.py
@@ -200,6 +200,7 @@
res = c_thread_acquirelock_NOAUTO(ll_lock, flag)
res = rffi.cast(lltype.Signed, res)
return bool(res)
+acquire_NOAUTO._annenforceargs_ = (None, bool)
def release_NOAUTO(ll_lock):
if not we_are_translated():
diff --git a/rpython/translator/c/genc.py b/rpython/translator/c/genc.py
--- a/rpython/translator/c/genc.py
+++ b/rpython/translator/c/genc.py
@@ -355,6 +355,11 @@
def cmdexec(self, args='', env=None, err=False, expect_crash=False):
assert self._compiled
+ if env is None:
+ envrepr = ''
+ else:
+ envrepr = ' [env=%r]' % (env,)
+ log.cmdexec('%s %s%s' % (self.executable_name, args, envrepr))
res = self.translator.platform.execute(self.executable_name, args,
env=env)
if res.returncode != 0:
More information about the pypy-commit
mailing list