From c82f86aed3dad0fdf3e8f22e0b1e77f5ecc8c6cd Mon Sep 17 00:00:00 2001 From: Diogo Trindade Date: Sat, 15 Feb 2025 15:48:31 +0000 Subject: [PATCH] handle unplugging devices properly --- .../Providers/Input/LinuxInputDeviceReader.cs | 11 ++++++++--- .../Providers/Input/LinuxInputProvider.cs | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Artemis.UI.Linux/Providers/Input/LinuxInputDeviceReader.cs b/src/Artemis.UI.Linux/Providers/Input/LinuxInputDeviceReader.cs index e06f852a2..9f78fd227 100644 --- a/src/Artemis.UI.Linux/Providers/Input/LinuxInputDeviceReader.cs +++ b/src/Artemis.UI.Linux/Providers/Input/LinuxInputDeviceReader.cs @@ -1,20 +1,24 @@ using System; +using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; +using Serilog; namespace Artemis.UI.Linux.Providers.Input; internal class LinuxInputDeviceReader { + private readonly ILogger _logger; private readonly byte[] _buffer; private readonly CancellationTokenSource _cts; private readonly FileStream _stream; private readonly Task _task; - public LinuxInputDeviceReader(LinuxInputDevice inputDevice) + public LinuxInputDeviceReader(LinuxInputDevice inputDevice, ILogger logger) { + _logger = logger; InputDevice = inputDevice; _buffer = new byte[Marshal.SizeOf()]; @@ -50,9 +54,10 @@ internal class LinuxInputDeviceReader InputEvent?.Invoke(this, MemoryMarshal.Read(_buffer)); } - catch + catch(Exception e) { - // ignored + _logger.Error("Error reading device input from {fileName}. Did you unplug a device? Stopping reader. {e}", InputDevice.EventPath, e); + return; } } } diff --git a/src/Artemis.UI.Linux/Providers/Input/LinuxInputProvider.cs b/src/Artemis.UI.Linux/Providers/Input/LinuxInputProvider.cs index 5c4349231..48af97dbf 100644 --- a/src/Artemis.UI.Linux/Providers/Input/LinuxInputProvider.cs +++ b/src/Artemis.UI.Linux/Providers/Input/LinuxInputProvider.cs @@ -21,7 +21,7 @@ public class LinuxInputProvider : InputProvider foreach (LinuxInputDevice deviceDefinition in LinuxInputDeviceFinder.Find()) { - LinuxInputDeviceReader? reader = new(deviceDefinition); + LinuxInputDeviceReader? reader = new(deviceDefinition, logger); reader.InputEvent += OnInputEvent; _readers.Add(reader); }