diff -r 36a624779f9f -r 9fa2f8ede5d6 runtime/xenomai.py --- /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