Fix ThreadSafeSingleton synchronization issue

This commit is contained in:
Roman Mogylatov 2021-03-23 21:07:27 -04:00
parent fca9fd498c
commit d8c20e57ca
2 changed files with 2945 additions and 2969 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2819,17 +2819,14 @@ cdef class ThreadSafeSingleton(BaseSingleton):
if instance is None: if instance is None:
with self.__storage_lock: with self.__storage_lock:
if self.__storage is None: if self.__storage is None:
instance = __factory_call(self.__instantiator, args, kwargs) result = __factory_call(self.__instantiator, args, kwargs)
if __is_future_or_coroutine(result):
if __is_future_or_coroutine(instance):
future_result = asyncio.Future() future_result = asyncio.Future()
instance = asyncio.ensure_future(instance) result = asyncio.ensure_future(result)
instance.add_done_callback(functools.partial(self._async_init_instance, future_result)) result.add_done_callback(functools.partial(self._async_init_instance, future_result))
self.__storage = future_result result = future_result
return future_result self.__storage = result
instance = self.__storage
self.__storage = instance
return instance return instance