Author: Armin Rigo <[email protected]>
Branch: stm-thread-2
Changeset: r60176:ffd1aad64887
Date: 2013-01-18 16:04 +0100
http://bitbucket.org/pypy/pypy/changeset/ffd1aad64887/
Log: Do not turn inevitable either on raw_malloc, in addition to
malloc(flavor='raw').
diff --git a/pypy/translator/backendopt/writeanalyze.py
b/pypy/translator/backendopt/writeanalyze.py
--- a/pypy/translator/backendopt/writeanalyze.py
+++ b/pypy/translator/backendopt/writeanalyze.py
@@ -82,7 +82,7 @@
for op in block.operations:
self.allvariables.add(op.result)
if (op.opname == 'malloc' or op.opname == 'malloc_varsize'
- or op.opname == 'new'):
+ or op.opname == 'new' or op.opname == 'raw_malloc'):
continue
elif op.opname in ('cast_pointer', 'same_as'):
if self.is_fresh_malloc(op.args[0]):
diff --git a/pypy/translator/stm/inevitable.py
b/pypy/translator/stm/inevitable.py
--- a/pypy/translator/stm/inevitable.py
+++ b/pypy/translator/stm/inevitable.py
@@ -71,6 +71,11 @@
# If the transaction is splitted, the remaining parts of the
# CFG will always run in inevitable mode anyways.
return not fresh_mallocs.is_fresh_malloc(op.args[0])
+ #
+ if op.opname == 'raw_malloc':
+ return False # XXX: Produces memory leaks on aborts
+ if op.opname == 'raw_free':
+ return not fresh_mallocs.is_fresh_malloc(op.args[0])
#
# Function calls
diff --git a/pypy/translator/stm/test/test_inevitable.py
b/pypy/translator/stm/test/test_inevitable.py
--- a/pypy/translator/stm/test/test_inevitable.py
+++ b/pypy/translator/stm/test/test_inevitable.py
@@ -42,13 +42,13 @@
def test_unsupported_op(self):
X = lltype.Struct('X', ('foo', lltype.Signed))
+ addr = llmemory.raw_malloc(llmemory.sizeof(X))
def f1():
- addr = llmemory.raw_malloc(llmemory.sizeof(X))
llmemory.raw_free(addr)
res = self.interpret_inevitable(f1, [])
- assert res == 'raw_malloc'
+ assert res == 'raw_free'
def test_raw_getfield(self):
X = lltype.Struct('X', ('foo', lltype.Signed))
@@ -105,7 +105,7 @@
res = self.interpret_inevitable(f1, [])
assert res is None
- def test_raw_malloc(self):
+ def test_raw_malloc_1(self):
X = lltype.Struct('X', ('foo', lltype.Signed))
def f1():
@@ -117,6 +117,18 @@
assert 0, """we do not turn inevitable before
raw-mallocs which causes leaks on aborts"""
+ def test_raw_malloc_2(self):
+ X = lltype.Struct('X', ('foo', lltype.Signed))
+
+ def f1():
+ addr = llmemory.raw_malloc(llmemory.sizeof(X))
+ llmemory.raw_free(addr)
+
+ res = self.interpret_inevitable(f1, [])
+ assert res is None
+ assert 0, """we do not turn inevitable before
+ raw-mallocs which causes leaks on aborts"""
+
def test_unknown_raw_free(self):
X = lltype.Struct('X', ('foo', lltype.Signed))
def f2(p):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit