fixed lock behaviour in read_image()

This commit is contained in:
Maxim Devaev 2022-07-24 09:34:27 +03:00
parent 049ea642dc
commit d05b46e05d

View File

@ -329,22 +329,29 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
@contextlib.asynccontextmanager @contextlib.asynccontextmanager
async def read_image(self, name: str) -> AsyncGenerator[int, None]: async def read_image(self, name: str) -> AsyncGenerator[int, None]:
async with self.__state.busy(): try:
assert self.__state.storage async with self.__state._region: # pylint: disable=protected-access
assert self.__state.vd try:
async with self.__state._lock: # pylint: disable=protected-access
await self.__notifier.notify()
assert self.__state.storage
assert self.__state.vd
if self.__state.vd.connected or self.__drive.get_image_path(): if self.__state.vd.connected or self.__drive.get_image_path():
raise MsdConnectedError() raise MsdConnectedError()
path = os.path.join(self.__images_path, name) path = os.path.join(self.__images_path, name)
if name not in self.__state.storage.images or not os.path.exists(path): if name not in self.__state.storage.images or not os.path.exists(path):
raise MsdUnknownImageError() raise MsdUnknownImageError()
try: self.__reader = await MsdImageReader(path, self.__read_chunk_size).open()
self.__reader = await MsdImageReader(path, self.__read_chunk_size).open()
yield self.__reader.get_size() yield self.__reader.get_size()
finally:
await self.__close_reader() finally:
await self.__close_reader()
finally:
await self.__notifier.notify()
async def read_image_chunk(self) -> bytes: async def read_image_chunk(self) -> bytes:
assert self.__reader assert self.__reader