[pypy-commit] pypy gc-minimark-pinning: a branch to experiment with pinning

fijal noreply at buildbot.pypy.org
Thu Apr 12 14:15:49 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: gc-minimark-pinning
Changeset: r54303:cb0a5d8aa8af
Date: 2012-04-12 13:52 +0200
http://bitbucket.org/pypy/pypy/changeset/cb0a5d8aa8af/

Log:	a branch to experiment with pinning

diff --git a/pypy/rlib/rgc.py b/pypy/rlib/rgc.py
--- a/pypy/rlib/rgc.py
+++ b/pypy/rlib/rgc.py
@@ -18,6 +18,24 @@
     """
     pass
 
+def pin(obj):
+    pass
+
+def unpin(obj):
+    pass
+
+
+class pinned_object(object):
+    def __init__(self, obj):
+        self.obj = obj
+        
+    def __enter__(self):
+        pin(self.obj)
+        return self
+    
+    def __exit__(self, *args):
+        unpin(self.obj)
+
 # ____________________________________________________________
 # Annotation and specialization
 
diff --git a/pypy/rlib/test/test_rgc.py b/pypy/rlib/test/test_rgc.py
--- a/pypy/rlib/test/test_rgc.py
+++ b/pypy/rlib/test/test_rgc.py
@@ -171,3 +171,9 @@
     x1 = X()
     n = rgc.get_rpy_memory_usage(rgc.cast_instance_to_gcref(x1))
     assert n >= 8 and n <= 64
+
+def test_pin_obj():
+    l = []
+    with rgc.pinned_object(l):
+        l.append(3)
+    assert l == [3]


More information about the pypy-commit mailing list