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