diff options
author | Maxim Devaev <[email protected]> | 2024-10-28 17:20:13 +0200 |
---|---|---|
committer | Maxim Devaev <[email protected]> | 2024-10-28 17:20:13 +0200 |
commit | 2195acf2ff8fdd9857db8a8b317b5fb98f4bacb7 (patch) | |
tree | dfd190a78c99f2074b95117c0ef2f01e180ea327 | |
parent | 60f413c1f4c5d2d69df03a2eea01eccf63c76976 (diff) |
Don't watch inotify modify events because they fires on every write()
-rw-r--r-- | kvmd/inotify.py | 13 | ||||
-rw-r--r-- | kvmd/plugins/msd/otg/__init__.py | 4 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/otgconf.py | 4 |
3 files changed, 11 insertions, 10 deletions
diff --git a/kvmd/inotify.py b/kvmd/inotify.py index 302dd006..e2cc6251 100644 --- a/kvmd/inotify.py +++ b/kvmd/inotify.py @@ -130,13 +130,12 @@ class InotifyMask: # | OPEN # ) - # Helper for all modify events - ALL_MODIFY_EVENTS = ( + # Helper for all changes events except MODIFY, because it fires on each write() + ALL_CHANGES_EVENTS = ( CLOSE_WRITE | CREATE | DELETE | DELETE_SELF - | MODIFY | MOVE_SELF | MOVED_FROM | MOVED_TO @@ -202,8 +201,8 @@ class Inotify: self.__events_queue: "asyncio.Queue[InotifyEvent]" = asyncio.Queue() - async def watch_all_modify(self, *paths: str) -> None: - await self.watch(InotifyMask.ALL_MODIFY_EVENTS, *paths) + async def watch_all_changes(self, *paths: str) -> None: + await self.watch(InotifyMask.ALL_CHANGES_EVENTS, *paths) async def watch(self, mask: int, *paths: str) -> None: for path in paths: @@ -237,7 +236,7 @@ class Inotify: except asyncio.TimeoutError: return None - async def get_series(self, timeout: float) -> list[InotifyEvent]: + async def get_series(self, timeout: float, max_series: int=64) -> list[InotifyEvent]: series: list[InotifyEvent] = [] event = await self.get_event(timeout) if event: @@ -246,6 +245,8 @@ class Inotify: event = await self.get_event(timeout) if event: series.append(event) + if len(series) >= max_series: + break return series def __read_and_queue_events(self) -> None: diff --git a/kvmd/plugins/msd/otg/__init__.py b/kvmd/plugins/msd/otg/__init__.py index 99de95e0..93eacbc7 100644 --- a/kvmd/plugins/msd/otg/__init__.py +++ b/kvmd/plugins/msd/otg/__init__.py @@ -439,8 +439,8 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes await asyncio.sleep(5) with Inotify() as inotify: - await inotify.watch_all_modify(*self.__storage.get_watchable_paths()) - await inotify.watch_all_modify(*self.__drive.get_watchable_paths()) + await inotify.watch_all_changes(*self.__storage.get_watchable_paths()) + await inotify.watch_all_changes(*self.__drive.get_watchable_paths()) # После установки вотчеров еще раз проверяем стейт, # чтобы не потерять состояние привода. diff --git a/kvmd/plugins/ugpio/otgconf.py b/kvmd/plugins/ugpio/otgconf.py index dc255b02..4c85b0e8 100644 --- a/kvmd/plugins/ugpio/otgconf.py +++ b/kvmd/plugins/ugpio/otgconf.py @@ -81,8 +81,8 @@ class Plugin(BaseUserGpioDriver): await asyncio.sleep(5) with Inotify() as inotify: - await inotify.watch_all_modify(os.path.dirname(self.__udc_path)) - await inotify.watch_all_modify(self.__profile_path) + await inotify.watch_all_changes(os.path.dirname(self.__udc_path)) + await inotify.watch_all_changes(self.__profile_path) self._notifier.notify() while True: need_restart = False |