mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-22 08:36:30 +00:00
Lookup udev device in monitor thread (#2503)
This commit is contained in:
parent
184eeb7f49
commit
517d6ee981
@ -33,10 +33,7 @@ class HwMonitor(CoreSysAttributes):
|
|||||||
self.monitor.set_receive_buffer_size(32 * 1024 * 1024)
|
self.monitor.set_receive_buffer_size(32 * 1024 * 1024)
|
||||||
|
|
||||||
self.observer = pyudev.MonitorObserver(
|
self.observer = pyudev.MonitorObserver(
|
||||||
self.monitor,
|
self.monitor, callback=self._udev_events
|
||||||
callback=lambda x: self.sys_loop.call_soon_threadsafe(
|
|
||||||
self._async_udev_events, x
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
except OSError:
|
except OSError:
|
||||||
self.sys_resolution.unhealthy = UnhealthyReason.PRIVILEGED
|
self.sys_resolution.unhealthy = UnhealthyReason.PRIVILEGED
|
||||||
@ -53,20 +50,30 @@ class HwMonitor(CoreSysAttributes):
|
|||||||
self.observer.stop()
|
self.observer.stop()
|
||||||
_LOGGER.info("Stopped Supervisor hardware monitor")
|
_LOGGER.info("Stopped Supervisor hardware monitor")
|
||||||
|
|
||||||
def _async_udev_events(self, kernel: pyudev.Device):
|
def _udev_events(self, kernel: pyudev.Device):
|
||||||
|
"""Incomming events from udev.
|
||||||
|
|
||||||
|
This is inside a observe thread and need pass into our eventloop.
|
||||||
|
"""
|
||||||
|
_LOGGER.debug("Hardware monitor: %s - %s", kernel.action, pformat(kernel))
|
||||||
|
try:
|
||||||
|
udev = pyudev.Devices.from_sys_path(self.context, kernel.sys_path)
|
||||||
|
except pyudev.DeviceNotFoundAtPathError:
|
||||||
|
udev = None
|
||||||
|
|
||||||
|
self.sys_loop.call_soon_threadsafe(
|
||||||
|
self._async_udev_events, kernel.action, kernel, udev
|
||||||
|
)
|
||||||
|
|
||||||
|
def _async_udev_events(
|
||||||
|
self, action: str, kernel: pyudev.Device, udev: Optional[pyudev.Device]
|
||||||
|
):
|
||||||
"""Incomming events from udev into loop."""
|
"""Incomming events from udev into loop."""
|
||||||
# Update device List
|
# Update device List
|
||||||
if not kernel.device_node or self.sys_hardware.helper.hide_virtual_device(
|
if not kernel.device_node or self.sys_hardware.helper.hide_virtual_device(
|
||||||
kernel
|
kernel
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
_LOGGER.debug("Hardware monitor: %s - %s", kernel.action, pformat(kernel))
|
|
||||||
|
|
||||||
# Lookup udev device data
|
|
||||||
try:
|
|
||||||
udev = pyudev.Devices.from_sys_path(self.context, kernel.sys_path)
|
|
||||||
except pyudev.DeviceNotFoundAtPathError:
|
|
||||||
udev = None
|
|
||||||
|
|
||||||
hw_action = None
|
hw_action = None
|
||||||
device = None
|
device = None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user