## @package extension_loader # Module caffe2.python.extension_loader import contextlib import ctypes import sys _set_global_flags = ( hasattr(sys, 'getdlopenflags') and hasattr(sys, 'setdlopenflags')) @contextlib.contextmanager def DlopenGuard(extra_flags=ctypes.RTLD_GLOBAL): if _set_global_flags: old_flags = sys.getdlopenflags() sys.setdlopenflags(old_flags | extra_flags) # in case we dlopen something that doesn't exist, yield will fail and throw; # we need to remember reset the old flags to clean up, otherwise RTLD_GLOBAL # flag will stick around and create symbol conflict problems try: yield finally: if _set_global_flags: sys.setdlopenflags(old_flags)