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