runtime/xenomai.py
changeset 2000 9fa2f8ede5d6
child 2015 4eeefc6a13fd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/runtime/xenomai.py	Fri Apr 27 16:32:53 2018 +0200
@@ -0,0 +1,16 @@
+from ctypes import CDLL, RTLD_GLOBAL, pointer, c_int, POINTER, c_char, create_string_buffer
+def TryPreloadXenomai():
+    """
+    Xenomai 3 (at least for version <= 3.0.6) do not handle properly dlclose
+    of shared objects whose dlopen did trigger xenomai_init.
+    As a workaround, this pre-loads xenomai libraries that need to be 
+    initialized and call xenomai_init once for all.
+    
+    Xenomai auto init of libs MUST be disabled (see --auto-init-solib in xeno-config)
+    """
+    try:
+        for name in ["cobalt", "modechk", "copperplate", "alchemy"]:
+            globals()[name] = CDLL("lib"+name+".so", mode=RTLD_GLOBAL)
+        cobalt.xenomai_init(pointer(c_int(0)), pointer((POINTER(c_char)*2)(create_string_buffer("prog_name"), None)))  
+    except:
+        pass