| 1234567891011121314151617181920212223242526272829 |
- ## @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)
|