fix(runtime): recover awake ownership and batch model failures
This commit is contained in:
1 parent
6b2c0f199d
commit
baf069854b
17 files changed
+477
-32
No files matched your search
@@ -101,7 +101,10 @@ def _configure_usb_stay_awake(device_id: str) -> str | None:
|
||||
# Migration cleanup belongs to the long-lived host. A queued task worker
|
||||
# must not wait on another process's optional legacy wake-lock cleanup.
|
||||
if os.environ.get("ARTEMIS_TASK_WORKER") != "1":
|
||||
ScreenAwakeLease(device_id).cleanup_unowned_references()
|
||||
try:
|
||||
ScreenAwakeLease(device_id).cleanup_unowned_references()
|
||||
except OSError as exc:
|
||||
logger.warning(f"Could not prepare optional legacy awake cleanup on {device_id}: {exc}")
|
||||
|
||||
commands = (
|
||||
(
|
||||
@@ -209,6 +212,7 @@ class ScreenAwakeService:
|
||||
self._monitor_thread: threading.Thread | None = None
|
||||
self._shutdown_requested = False
|
||||
self._owners: dict[str, FileLock] = {}
|
||||
self._ownership_warnings: set[str] = set()
|
||||
|
||||
def start(self, device_ids: Iterable[str] | None = None) -> dict[str, str | None]:
|
||||
if self._shutdown_requested:
|
||||
@@ -241,13 +245,24 @@ class ScreenAwakeService:
|
||||
existing = self._strategies.get(device_id)
|
||||
if existing is not None:
|
||||
return existing
|
||||
owner = _owner_lock(device_id)
|
||||
try:
|
||||
owner = _owner_lock(device_id)
|
||||
owner.acquire(timeout=0)
|
||||
except Timeout:
|
||||
# Do not cache a follower as owner: discovery can take over if
|
||||
# the process holding the OS lock exits or releases the device.
|
||||
return None
|
||||
except OSError as exc:
|
||||
# Awake is optional. Never bypass ownership or let an ACL / I/O
|
||||
# failure abort device connection, resume, or the host monitor.
|
||||
if device_id not in self._ownership_warnings:
|
||||
logger.warning(
|
||||
f"Could not acquire awake ownership on {device_id}; skipping optional "
|
||||
f"stay-awake policy: {exc}"
|
||||
)
|
||||
self._ownership_warnings.add(device_id)
|
||||
return None
|
||||
self._ownership_warnings.discard(device_id)
|
||||
try:
|
||||
strategy = _configure_usb_stay_awake(device_id)
|
||||
except BaseException:
|
||||
|
||||
Reference in new issue
Block a user