]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[master] python nested dlopen fix
authorJelte Jansen <jelte@isc.org>
Tue, 11 Oct 2011 09:58:29 +0000 (09:58 +0000)
committerJelte Jansen <jelte@isc.org>
Tue, 11 Oct 2011 09:58:29 +0000 (09:58 +0000)
src/lib/python/isc/datasrc/__init__.py

index 0b4ed989cf47af647844c3efc68e2bc034e5bfa5..7ebd91829a601f5ad8958706ea6df55f1dfb35f1 100644 (file)
@@ -1,6 +1,16 @@
 import sys
 import os
 
+# The datasource factory loader uses dlopen, as does python
+# for its modules. Some dynamic linkers do not play nice if 
+# modules are not loaded with RTLD_GLOBAL, a symptom of which
+# is that exceptions are not recognized by type. So to make
+# sure this doesn't happen, we temporarily set RTLD_GLOBAL
+# during the loading of the datasource wrappers.
+import ctypes
+flags = sys.getdlopenflags()
+sys.setdlopenflags(flags | ctypes.RTLD_GLOBAL)
+
 # this setup is a temporary workaround to deal with the problem of
 # having both 'normal' python modules and a wrapper module
 # Once all programs use the new interface, we should remove the
@@ -16,6 +26,10 @@ if intree:
     from datasrc import *
 else:
     from isc.datasrc.datasrc import *
+
+# revert to the default dlopen flags
+sys.setdlopenflags(flags)
+
 from isc.datasrc.sqlite3_ds import *
 from isc.datasrc.master import *