summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kvmd/aiogp.py4
-rw-r--r--kvmd/aiotools.py9
-rw-r--r--kvmd/apps/kvmd/server.py8
-rw-r--r--kvmd/apps/kvmd/snapshoter.py4
-rw-r--r--kvmd/apps/kvmd/streamer.py4
-rw-r--r--kvmd/apps/pst/server.py4
-rw-r--r--kvmd/apps/vnc/server.py6
-rw-r--r--kvmd/plugins/msd/__init__.py4
-rw-r--r--kvmd/plugins/msd/otg/__init__.py28
-rw-r--r--kvmd/plugins/msd/relay/__init__.py2
-rw-r--r--kvmd/plugins/ugpio/ezcoo.py2
-rw-r--r--kvmd/plugins/ugpio/hidrelay.py2
-rw-r--r--kvmd/plugins/ugpio/hue.py4
-rw-r--r--kvmd/plugins/ugpio/ipmi.py2
-rw-r--r--kvmd/plugins/ugpio/otgconf.py6
-rw-r--r--kvmd/plugins/ugpio/pway.py2
-rw-r--r--kvmd/plugins/ugpio/tesmart.py4
-rw-r--r--kvmd/plugins/ugpio/xh_hk4401.py2
18 files changed, 43 insertions, 54 deletions
diff --git a/kvmd/aiogp.py b/kvmd/aiogp.py
index 534c82a9..6860c6ba 100644
--- a/kvmd/aiogp.py
+++ b/kvmd/aiogp.py
@@ -107,7 +107,7 @@ class AioReader: # pylint: disable=too-many-instance-attributes
)
for (pin, value) in zip(pins, lines.get_values())
}
- self.__loop.call_soon_threadsafe(self.__notifier.notify_sync)
+ self.__loop.call_soon_threadsafe(self.__notifier.notify)
while not self.__stop_event.is_set():
ev_lines = lines.event_wait(1)
@@ -170,5 +170,5 @@ class _DebouncedValue:
value = await self.__queue.get()
if self.__value != value:
self.__value = value
- await self.__notifier.notify()
+ self.__notifier.notify()
await asyncio.sleep(self.__debounce)
diff --git a/kvmd/aiotools.py b/kvmd/aiotools.py
index 2a798e2a..07981fde 100644
--- a/kvmd/aiotools.py
+++ b/kvmd/aiotools.py
@@ -232,10 +232,7 @@ class AioNotifier:
def __init__(self) -> None:
self.__queue: "asyncio.Queue[None]" = asyncio.Queue()
- async def notify(self) -> None:
- await self.__queue.put(None)
-
- def notify_sync(self) -> None:
+ def notify(self) -> None:
self.__queue.put_nowait(None)
async def wait(self, timeout: Optional[float]=None) -> None:
@@ -299,7 +296,7 @@ class AioExclusiveRegion:
self.__busy = True
try:
if self.__notifier:
- await self.__notifier.notify()
+ self.__notifier.notify()
except: # noqa: E722
self.__busy = False
raise
@@ -309,7 +306,7 @@ class AioExclusiveRegion:
async def exit(self) -> None:
self.__busy = False
if self.__notifier:
- await self.__notifier.notify()
+ self.__notifier.notify()
async def __aenter__(self) -> None:
await self.enter()
diff --git a/kvmd/apps/kvmd/server.py b/kvmd/apps/kvmd/server.py
index 5adc8d8d..6cb2ef5e 100644
--- a/kvmd/apps/kvmd/server.py
+++ b/kvmd/apps/kvmd/server.py
@@ -213,13 +213,13 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
value = validator(value) # type: ignore
if current_params[name] != value:
self.__new_streamer_params[name] = value
- await self.__streamer_notifier.notify()
+ self.__streamer_notifier.notify()
return make_json_response()
@exposed_http("POST", "/streamer/reset")
async def __streamer_reset_handler(self, _: Request) -> Response:
self.__reset_streamer = True
- await self.__streamer_notifier.notify()
+ self.__streamer_notifier.notify()
return make_json_response()
# ===== WEBSOCKET
@@ -299,11 +299,11 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
logger.info("On-Cleanup complete")
async def _on_ws_opened(self) -> None:
- await self.__streamer_notifier.notify()
+ self.__streamer_notifier.notify()
async def _on_ws_closed(self) -> None:
self.__hid.clear_events()
- await self.__streamer_notifier.notify()
+ self.__streamer_notifier.notify()
def __has_stream_clients(self) -> bool:
return bool(sum(map(
diff --git a/kvmd/apps/kvmd/snapshoter.py b/kvmd/apps/kvmd/snapshoter.py
index 0a8874a1..fed3de92 100644
--- a/kvmd/apps/kvmd/snapshoter.py
+++ b/kvmd/apps/kvmd/snapshoter.py
@@ -96,7 +96,7 @@ class Snapshoter: # pylint: disable=too-many-instance-attributes
logger.info("Time to take the new idle snapshot")
try:
self.__snapshoting = True
- await notifier.notify()
+ notifier.notify()
if not live:
await self.__wakeup()
@@ -116,7 +116,7 @@ class Snapshoter: # pylint: disable=too-many-instance-attributes
logger.exception("Unhandled exception while taking snapshot")
finally:
self.__snapshoting = False
- await asyncio.shield(notifier.notify())
+ notifier.notify()
async def __wakeup(self) -> None:
logger = get_logger(0)
diff --git a/kvmd/apps/kvmd/streamer.py b/kvmd/apps/kvmd/streamer.py
index 1e387240..cc753aff 100644
--- a/kvmd/apps/kvmd/streamer.py
+++ b/kvmd/apps/kvmd/streamer.py
@@ -319,7 +319,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes
async def poll_state(self) -> AsyncGenerator[Dict, None]:
def signal_handler(*_: Any) -> None:
get_logger(0).info("Got SIGUSR2, checking the stream state ...")
- asyncio.ensure_future(self.__notifier.notify())
+ self.__notifier.notify()
get_logger(0).info("Installing SIGUSR2 streamer handler ...")
asyncio.get_event_loop().add_signal_handler(signal.SIGUSR2, signal_handler)
@@ -370,7 +370,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes
)
if save:
self.__snapshot = snapshot
- await self.__notifier.notify()
+ self.__notifier.notify()
return snapshot
logger.error("Stream is offline, no signal or so")
except (aiohttp.ClientConnectionError, aiohttp.ServerConnectionError) as err:
diff --git a/kvmd/apps/pst/server.py b/kvmd/apps/pst/server.py
index 968d322d..a492a29b 100644
--- a/kvmd/apps/pst/server.py
+++ b/kvmd/apps/pst/server.py
@@ -96,10 +96,10 @@ class PstServer(HttpServer): # pylint: disable=too-many-arguments,too-many-inst
logger.info("On-Cleanup complete")
async def _on_ws_opened(self) -> None:
- await self.__notifier.notify()
+ self.__notifier.notify()
async def _on_ws_closed(self) -> None:
- await self.__notifier.notify()
+ self.__notifier.notify()
# ===== SYSTEM TASKS
diff --git a/kvmd/apps/vnc/server.py b/kvmd/apps/vnc/server.py
index 54974bfb..151f6374 100644
--- a/kvmd/apps/vnc/server.py
+++ b/kvmd/apps/vnc/server.py
@@ -294,7 +294,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
if len(last["data"]) == 0:
# Вдруг какой-то баг
- await self.__fb_notifier.notify()
+ self.__fb_notifier.notify()
continue
if last["format"] == StreamFormats.JPEG:
@@ -305,7 +305,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
if has_h264_key:
await self._send_fb_h264(last["data"])
else:
- await self.__fb_notifier.notify()
+ self.__fb_notifier.notify()
else:
raise RuntimeError(f"Unknown format: {last['format']}")
last["data"] = b""
@@ -406,7 +406,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
await self.__kvmd_session.streamer.set_params(quality, self.__desired_fps)
async def _on_fb_update_request(self) -> None:
- await self.__fb_notifier.notify()
+ self.__fb_notifier.notify()
# =====
diff --git a/kvmd/plugins/msd/__init__.py b/kvmd/plugins/msd/__init__.py
index 753a1cd0..1e4a521e 100644
--- a/kvmd/plugins/msd/__init__.py
+++ b/kvmd/plugins/msd/__init__.py
@@ -218,7 +218,7 @@ class MsdFileReader(BaseMsdReader): # pylint: disable=too-many-instance-attribu
now = time.monotonic()
if self.__tick + 1 < now or self.__readed == self.__file_size:
self.__tick = now
- await self.__notifier.notify()
+ self.__notifier.notify()
yield chunk
@@ -277,7 +277,7 @@ class MsdFileWriter(BaseMsdWriter): # pylint: disable=too-many-instance-attribu
now = time.monotonic()
if self.__tick + 1 < now:
self.__tick = now
- await self.__notifier.notify()
+ self.__notifier.notify()
return self.__written
diff --git a/kvmd/plugins/msd/otg/__init__.py b/kvmd/plugins/msd/otg/__init__.py
index 2d556048..8d1ee8a5 100644
--- a/kvmd/plugins/msd/otg/__init__.py
+++ b/kvmd/plugins/msd/otg/__init__.py
@@ -121,13 +121,13 @@ class _State:
async def busy(self, check_online: bool=True) -> AsyncGenerator[None, None]:
async with self._region:
async with self._lock:
- await self.__notifier.notify()
+ self.__notifier.notify()
if check_online:
if self.vd is None:
raise MsdOfflineError()
assert self.storage
yield
- await self.__notifier.notify()
+ self.__notifier.notify()
def is_busy(self) -> bool:
return self._region.is_busy()
@@ -173,7 +173,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
logger = get_logger(0)
logger.info("Using OTG gadget %r as MSD", gadget)
- aiotools.run_sync(self.__reload_state())
+ aiotools.run_sync(self.__reload_state(notify=False))
@classmethod
def get_plugin_options(cls) -> Dict:
@@ -334,7 +334,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
async with self.__state._region: # pylint: disable=protected-access
try:
async with self.__state._lock: # pylint: disable=protected-access
- await self.__notifier.notify()
+ self.__notifier.notify()
assert self.__state.storage
assert self.__state.vd
@@ -361,10 +361,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
except asyncio.CancelledError:
pass
finally:
- try:
- await asyncio.shield(self.__notifier.notify())
- except asyncio.CancelledError:
- pass
+ self.__notifier.notify()
@contextlib.asynccontextmanager
async def write_image(self, name: str, size: int, remove_incomplete: Optional[bool]) -> AsyncGenerator[MsdFileWriter, None]:
@@ -373,7 +370,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
path: str = ""
try:
async with self.__state._lock: # pylint: disable=protected-access
- await self.__notifier.notify()
+ self.__notifier.notify()
assert self.__state.storage
assert self.__state.vd
@@ -395,7 +392,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
chunk_size=self.__write_chunk_size,
).open()
- await self.__notifier.notify()
+ self.__notifier.notify()
yield self.__writer
self.__set_image_complete(name, self.__writer.is_complete())
@@ -421,10 +418,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
await asyncio.shield(self.__reload_state())
except asyncio.CancelledError:
pass
- try:
- await asyncio.shield(self.__notifier.notify())
- except asyncio.CancelledError:
- pass
@aiotools.atomic
async def remove(self, name: str) -> None:
@@ -470,7 +463,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
while True:
# Активно ждем, пока не будут на месте все каталоги.
await self.__reload_state()
- await self.__notifier.notify()
if self.__state.vd:
break
await asyncio.sleep(5)
@@ -483,7 +475,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
# После установки вотчеров еще раз проверяем стейт, чтобы ничего не потерять
await self.__reload_state()
- await self.__notifier.notify()
while self.__state.vd: # Если живы после предыдущей проверки
need_restart = False
@@ -499,12 +490,11 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
break
if need_reload_state:
await self.__reload_state()
- await self.__notifier.notify()
except Exception:
logger.exception("Unexpected MSD watcher error")
time.sleep(1)
- async def __reload_state(self) -> None:
+ async def __reload_state(self, notify: bool=True) -> None:
logger = get_logger(0)
async with self.__state._lock: # pylint: disable=protected-access
try:
@@ -541,6 +531,8 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
self.__state.vd.image = None
self.__state.vd.connected = False
+ if notify:
+ self.__notifier.notify()
async def __setup_initial(self) -> None:
if self.__initial_image:
diff --git a/kvmd/plugins/msd/relay/__init__.py b/kvmd/plugins/msd/relay/__init__.py
index 9e507556..f6b13dc5 100644
--- a/kvmd/plugins/msd/relay/__init__.py
+++ b/kvmd/plugins/msd/relay/__init__.py
@@ -245,7 +245,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
).open()
await self.__write_image_info(False)
- await self.__notifier.notify()
+ self.__notifier.notify()
yield self.__device_writer
await self.__write_image_info(True)
finally:
diff --git a/kvmd/plugins/ugpio/ezcoo.py b/kvmd/plugins/ugpio/ezcoo.py
index 3cfc2e05..ac7ee0f3 100644
--- a/kvmd/plugins/ugpio/ezcoo.py
+++ b/kvmd/plugins/ugpio/ezcoo.py
@@ -101,7 +101,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
(got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1)
if got and self.__channel != channel:
self.__channel = channel
- await self._notifier.notify()
+ self._notifier.notify()
async def cleanup(self) -> None:
if self.__proc is not None:
diff --git a/kvmd/plugins/ugpio/hidrelay.py b/kvmd/plugins/ugpio/hidrelay.py
index 1dce0909..d1786908 100644
--- a/kvmd/plugins/ugpio/hidrelay.py
+++ b/kvmd/plugins/ugpio/hidrelay.py
@@ -109,7 +109,7 @@ class Plugin(BaseUserGpioDriver):
except Exception:
raw = -1
if raw != prev_raw:
- await self._notifier.notify()
+ self._notifier.notify()
prev_raw = raw
await asyncio.sleep(self.__state_poll)
diff --git a/kvmd/plugins/ugpio/hue.py b/kvmd/plugins/ugpio/hue.py
index f81df4ca..b34cb719 100644
--- a/kvmd/plugins/ugpio/hue.py
+++ b/kvmd/plugins/ugpio/hue.py
@@ -122,7 +122,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
get_logger().error("Failed Hue bulk GET request: %s", tools.efmt(err))
self.__state = dict.fromkeys(self.__state, None)
if self.__state != prev_state:
- await self._notifier.notify()
+ self._notifier.notify()
prev_state = self.__state
await self.__update_notifier.wait(self.__state_poll)
@@ -148,7 +148,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
get_logger().error("Failed Hue PUT request to pin %s: %s", pin, tools.efmt(err))
raise GpioDriverOfflineError(self)
else:
- await self.__update_notifier.notify()
+ self.__update_notifier.notify()
def __ensure_http_session(self) -> aiohttp.ClientSession:
if not self.__http_session:
diff --git a/kvmd/plugins/ugpio/ipmi.py b/kvmd/plugins/ugpio/ipmi.py
index 65c7efdf..e822065d 100644
--- a/kvmd/plugins/ugpio/ipmi.py
+++ b/kvmd/plugins/ugpio/ipmi.py
@@ -135,7 +135,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
await self.__update_power()
new = (self.__online, self.__power)
if new != prev:
- await self._notifier.notify()
+ self._notifier.notify()
prev = new
await asyncio.sleep(self.__state_poll)
diff --git a/kvmd/plugins/ugpio/otgconf.py b/kvmd/plugins/ugpio/otgconf.py
index efe1b5c4..28eae8fe 100644
--- a/kvmd/plugins/ugpio/otgconf.py
+++ b/kvmd/plugins/ugpio/otgconf.py
@@ -76,7 +76,7 @@ class Plugin(BaseUserGpioDriver):
while True:
try:
while True:
- await self._notifier.notify()
+ self._notifier.notify()
if os.path.isfile(self.__udc_path):
break
await asyncio.sleep(5)
@@ -84,7 +84,7 @@ class Plugin(BaseUserGpioDriver):
with Inotify() as inotify:
inotify.watch(os.path.dirname(self.__udc_path), InotifyMask.ALL_MODIFY_EVENTS)
inotify.watch(self.__profile_path, InotifyMask.ALL_MODIFY_EVENTS)
- await self._notifier.notify()
+ self._notifier.notify()
while True:
need_restart = False
need_notify = False
@@ -97,7 +97,7 @@ class Plugin(BaseUserGpioDriver):
if need_restart:
break
if need_notify:
- await self._notifier.notify()
+ self._notifier.notify()
except Exception:
logger.exception("Unexpected OTG-bind watcher error")
await asyncio.sleep(1)
diff --git a/kvmd/plugins/ugpio/pway.py b/kvmd/plugins/ugpio/pway.py
index 041aaf27..969838f3 100644
--- a/kvmd/plugins/ugpio/pway.py
+++ b/kvmd/plugins/ugpio/pway.py
@@ -103,7 +103,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
(got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1)
if got and self.__channel != channel:
self.__channel = channel
- await self._notifier.notify()
+ self._notifier.notify()
async def cleanup(self) -> None:
if self.__proc is not None:
diff --git a/kvmd/plugins/ugpio/tesmart.py b/kvmd/plugins/ugpio/tesmart.py
index 288f2133..e3f5a3bd 100644
--- a/kvmd/plugins/ugpio/tesmart.py
+++ b/kvmd/plugins/ugpio/tesmart.py
@@ -111,7 +111,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
except Exception:
pass
if self.__active != prev_active:
- await self._notifier.notify()
+ self._notifier.notify()
prev_active = self.__active
await self.__update_notifier.wait(self.__state_poll)
@@ -127,7 +127,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
assert 1 <= channel <= 16
if state:
await self.__send_command("{:c}{:c}".format(1, channel).encode())
- await self.__update_notifier.notify()
+ self.__update_notifier.notify()
await asyncio.sleep(self.__switch_delay) # Slowdown
# =====
diff --git a/kvmd/plugins/ugpio/xh_hk4401.py b/kvmd/plugins/ugpio/xh_hk4401.py
index 53582897..d2ed34a5 100644
--- a/kvmd/plugins/ugpio/xh_hk4401.py
+++ b/kvmd/plugins/ugpio/xh_hk4401.py
@@ -99,7 +99,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
(got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1)
if got and self.__channel != channel:
self.__channel = channel
- await self._notifier.notify()
+ self._notifier.notify()
async def cleanup(self) -> None:
if self.__proc is not None: