17db96d56Sopenharmony_ci"""Event loop mixins.""" 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciimport threading 47db96d56Sopenharmony_cifrom . import events 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci_global_lock = threading.Lock() 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ciclass _LoopBoundMixin: 107db96d56Sopenharmony_ci _loop = None 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci def _get_loop(self): 137db96d56Sopenharmony_ci loop = events._get_running_loop() 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci if self._loop is None: 167db96d56Sopenharmony_ci with _global_lock: 177db96d56Sopenharmony_ci if self._loop is None: 187db96d56Sopenharmony_ci self._loop = loop 197db96d56Sopenharmony_ci if loop is not self._loop: 207db96d56Sopenharmony_ci raise RuntimeError(f'{self!r} is bound to a different event loop') 217db96d56Sopenharmony_ci return loop 22