Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r93898:5e00d00261f8
Date: 2018-02-27 19:58 +0100
http://bitbucket.org/pypy/pypy/changeset/5e00d00261f8/

Log:    Update the _cffi_backend module to 1.11.5

diff --git a/pypy/module/_cffi_backend/__init__.py 
b/pypy/module/_cffi_backend/__init__.py
--- a/pypy/module/_cffi_backend/__init__.py
+++ b/pypy/module/_cffi_backend/__init__.py
@@ -3,7 +3,7 @@
 from rpython.rlib import rdynload, clibffi
 from rpython.rtyper.lltypesystem import rffi
 
-VERSION = "1.11.4"
+VERSION = "1.11.5"
 
 FFI_DEFAULT_ABI = clibffi.FFI_DEFAULT_ABI
 try:
diff --git a/pypy/module/_cffi_backend/libraryobj.py 
b/pypy/module/_cffi_backend/libraryobj.py
--- a/pypy/module/_cffi_backend/libraryobj.py
+++ b/pypy/module/_cffi_backend/libraryobj.py
@@ -38,9 +38,16 @@
         space = self.space
         return space.newtext("<clibrary '%s'>" % self.name)
 
+    def check_closed(self):
+        if self.handle == rffi.cast(DLLHANDLE, 0):
+            raise oefmt(space.w_ValueError,
+                        "library '%s' has already been closed",
+                        self.name)
+
     @unwrap_spec(w_ctype=W_CType, name='text')
     def load_function(self, w_ctype, name):
         from pypy.module._cffi_backend import ctypeptr, ctypearray
+        self.check_closed()
         space = self.space
         #
         if not isinstance(w_ctype, ctypeptr.W_CTypePtrOrArray):
@@ -60,6 +67,7 @@
 
     @unwrap_spec(w_ctype=W_CType, name='text')
     def read_variable(self, w_ctype, name):
+        self.check_closed()
         space = self.space
         try:
             cdata = dlsym(self.handle, name)
@@ -71,6 +79,7 @@
 
     @unwrap_spec(w_ctype=W_CType, name='text')
     def write_variable(self, w_ctype, name, w_value):
+        self.check_closed()
         space = self.space
         try:
             cdata = dlsym(self.handle, name)
@@ -80,6 +89,10 @@
                         name, self.name)
         w_ctype.convert_from_object(rffi.cast(rffi.CCHARP, cdata), w_value)
 
+    def close_lib(self):
+        self.check_closed()
+        self._finalize_()
+
 
 W_Library.typedef = TypeDef(
     '_cffi_backend.Library',
@@ -87,6 +100,7 @@
     load_function = interp2app(W_Library.load_function),
     read_variable = interp2app(W_Library.read_variable),
     write_variable = interp2app(W_Library.write_variable),
+    close_lib = interp2app(W_Library.close_lib),
     )
 W_Library.typedef.acceptable_as_base_class = False
 
diff --git a/pypy/module/_cffi_backend/test/_backend_test_c.py 
b/pypy/module/_cffi_backend/test/_backend_test_c.py
--- a/pypy/module/_cffi_backend/test/_backend_test_c.py
+++ b/pypy/module/_cffi_backend/test/_backend_test_c.py
@@ -1,7 +1,7 @@
 # ____________________________________________________________
 
 import sys
-assert __version__ == "1.11.4", ("This test_c.py file is for testing a version"
+assert __version__ == "1.11.5", ("This test_c.py file is for testing a version"
                                  " of cffi that differs from the one that we"
                                  " get from 'import _cffi_backend'")
 if sys.version_info < (3,):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to