[pypy-commit] cffi default: improve doc for the fix to ffi.new_handle()
arigo
noreply at buildbot.pypy.org
Mon Nov 23 15:33:27 EST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r2431:fff3a26ea892
Date: 2015-11-23 21:34 +0100
http://bitbucket.org/cffi/cffi/changeset/fff3a26ea892/
Log: improve doc for the fix to ffi.new_handle()
diff --git a/doc/source/using.rst b/doc/source/using.rst
--- a/doc/source/using.rst
+++ b/doc/source/using.rst
@@ -843,9 +843,7 @@
* ``new_handle()`` returns cdata objects that contains references to
the Python objects; we call them collectively the "handle" cdata
objects. The ``void *`` value in these handle cdata objects are
- random but unique. *New in version 1.4:* two calls to
- ``new_handle(x)`` are guaranteed to return cdata objects with
- different ``void *`` values, even with the same ``x``.
+ random but unique.
* ``from_handle(p)`` searches all live "handle" cdata objects for the
one that has the same value ``p`` as its ``void *`` value. It then
@@ -858,6 +856,16 @@
then the association ``void * -> python_object`` is dead and
``from_handle()`` will crash.
+*New in version 1.4:* two calls to ``new_handle(x)`` are guaranteed to
+return cdata objects with different ``void *`` values, even with the
+same ``x``. This is a useful feature that avoids issues with unexpected
+duplicates in the following trick: if you need to keep alive the
+"handle" until explicitly asked to free it, but don't have a natural
+Python-side place to attach it to, then the easiest is to ``add()`` it
+to a global set. It can later be removed from the set by
+``global_set.discard(p)``, with ``p`` any cdata object whose ``void *``
+value compares equal.
+
.. _`ffi.addressof()`:
diff --git a/doc/source/whatsnew.rst b/doc/source/whatsnew.rst
--- a/doc/source/whatsnew.rst
+++ b/doc/source/whatsnew.rst
@@ -8,9 +8,10 @@
* ``ffi.new_handle()`` is now guaranteed to return unique ``void *``
values, even if called twice on the same object. Previously, in
- that case, CPython (but not PyPy) would return different ``cdata``
- objects with the same ``void *`` value. This is useful to add and
- remove handles from a global set without worrying about duplicates.
+ that case, CPython (but not PyPy) would return two ``cdata`` objects
+ with the same ``void *`` value. This change is useful to add and
+ remove handles from a global dict or set without worrying about
+ duplicates.
* ``ffi.init_once()`` XXX
https://bitbucket.org/cffi/cffi/issues/233/
More information about the pypy-commit
mailing list