Author: Romain Guillebert <romain...@gmail.com>
Branch: 
Changeset: r1588:2ff481ead26d
Date: 2014-10-21 13:28 +0200
http://bitbucket.org/cffi/cffi/changeset/2ff481ead26d/

Log:    Import verify dlopen flags for cpython

diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py
--- a/cffi/vengine_cpy.py
+++ b/cffi/vengine_cpy.py
@@ -138,15 +138,19 @@
         prnt()
         prnt('#endif')
 
-    def load_library(self):
+    def load_library(self, flags=0):
         # XXX review all usages of 'self' here!
         # import it as a new extension module
+        previous_flags = sys.getdlopenflags()
         try:
+            sys.setdlopenflags(flags)
             module = imp.load_dynamic(self.verifier.get_module_name(),
                                       self.verifier.modulefilename)
         except ImportError as e:
             error = "importing %r: %s" % (self.verifier.modulefilename, e)
             raise ffiplatform.VerificationError(error)
+        finally:
+            sys.setdlopenflags(previous_flags)
         #
         # call loading_cpy_struct() to get the struct layout inferred by
         # the C compiler
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -1965,14 +1965,18 @@
 
 def test_verify_dlopen_flags():
     ffi1 = FFI()
-    ffi2 = FFI()
+    ffi1.cdef("int foo;")
 
-    ffi1.cdef("int foo;")
-    ffi2.cdef("int foo;")
-
-    lib1 = ffi1.verify("int foo;", modulename="foo1", flags=ffi1.RTLD_GLOBAL)
-    lib2 = ffi2.verify("int foo;", modulename="foo2", flags=ffi2.RTLD_GLOBAL)
+    lib1 = ffi1.verify("int foo;", flags=ffi1.RTLD_GLOBAL | ffi1.RTLD_LAZY)
+    lib2 = get_second_lib()
 
     lib1.foo = 42
 
     assert lib2.foo == 42
+
+def get_second_lib():
+    # Hack, using modulename makes the test fail
+    ffi2 = FFI()
+    ffi2.cdef("int foo;")
+    lib2 = ffi2.verify("int foo;", flags=ffi2.RTLD_GLOBAL | ffi2.RTLD_LAZY)
+    return lib2
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to