Blame SOURCES/0001-Remove-the-device-s-fd-from-the-select-set-when-we-g.patch

54d94e
From 84e81636b29cca6dc1a5423e76ac2ab2c636eb86 Mon Sep 17 00:00:00 2001
54d94e
From: Peter Hutterer <peter.hutterer@who-t.net>
54d94e
Date: Tue, 18 Jul 2017 08:41:37 +1000
54d94e
Subject: [PATCH] Remove the device's fd from the select() set when we get
54d94e
 ENODEV
54d94e
54d94e
If the device is unplugged, the fd triggers in select/poll/... but comes back
54d94e
with ENODEV. This triggers a lot of error messages in the log until finally
54d94e
the udev code catches up with us and the device is removed properly.
54d94e
54d94e
Catch that case by removing the fd from the select() set so we don't get
54d94e
triggered to call read_input on it anymore.
54d94e
54d94e
https://sourceforge.net/p/linuxwacom/bugs/337/
54d94e
54d94e
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
54d94e
Tested-by: crocket <crockabiscuit@gmail.com>
54d94e
Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
54d94e
(cherry picked from commit 912611608b3ba892a7c26d1be81209f4e5b009d5)
54d94e
---
54d94e
 src/xf86Wacom.c | 12 +++++++++---
54d94e
 src/xf86Wacom.h |  2 +-
54d94e
 2 files changed, 10 insertions(+), 4 deletions(-)
54d94e
54d94e
diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
54d94e
index 90ce793..896a8c1 100644
54d94e
--- a/src/xf86Wacom.c
54d94e
+++ b/src/xf86Wacom.c
54d94e
@@ -632,7 +632,8 @@ static void wcmDevReadInput(InputInfoPtr pInfo)
54d94e
 		if (!wcmReady(pInfo)) break;
54d94e
 
54d94e
 		/* dispatch */
54d94e
-		wcmReadPacket(pInfo);
54d94e
+		if (!wcmReadPacket(pInfo))
54d94e
+			break;
54d94e
 	}
54d94e
 
54d94e
 #ifdef DEBUG
54d94e
@@ -649,7 +650,7 @@ static void wcmDevReadInput(InputInfoPtr pInfo)
54d94e
 #endif
54d94e
 }
54d94e
 
54d94e
-void wcmReadPacket(InputInfoPtr pInfo)
54d94e
+Bool wcmReadPacket(InputInfoPtr pInfo)
54d94e
 {
54d94e
 	WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
54d94e
 	WacomCommonPtr common = priv->common;
54d94e
@@ -672,7 +673,10 @@ void wcmReadPacket(InputInfoPtr pInfo)
54d94e
 		if (errno != EAGAIN && errno != EINTR)
54d94e
 			LogMessageVerbSigSafe(X_ERROR, 0,
54d94e
 					      "%s: Error reading wacom device : %s\n", pInfo->name, strerror(errno));
54d94e
-		return;
54d94e
+		if (errno == ENODEV)
54d94e
+			xf86RemoveEnabledDevice(pInfo);
54d94e
+
54d94e
+		return FALSE;
54d94e
 	}
54d94e
 
54d94e
 	/* account for new data */
54d94e
@@ -704,6 +708,8 @@ void wcmReadPacket(InputInfoPtr pInfo)
54d94e
 	}
54d94e
 
54d94e
 	common->bufpos = len;
54d94e
+
54d94e
+	return TRUE;
54d94e
 }
54d94e
 
54d94e
 int wcmDevChangeControl(InputInfoPtr pInfo, xDeviceCtl * control)
54d94e
diff --git a/src/xf86Wacom.h b/src/xf86Wacom.h
54d94e
index afb4e9e..ccc2d56 100644
54d94e
--- a/src/xf86Wacom.h
54d94e
+++ b/src/xf86Wacom.h
54d94e
@@ -120,7 +120,7 @@ char *wcmEventAutoDevProbe (InputInfoPtr pInfo);
54d94e
 int wcmInitTablet(InputInfoPtr pInfo, const char* id, float version);
54d94e
 
54d94e
 /* standard packet handler */
54d94e
-void wcmReadPacket(InputInfoPtr pInfo);
54d94e
+Bool wcmReadPacket(InputInfoPtr pInfo);
54d94e
 
54d94e
 /* handles suppression, filtering, and dispatch. */
54d94e
 void wcmEvent(WacomCommonPtr common, unsigned int channel, const WacomDeviceState* ds);
54d94e
-- 
54d94e
2.13.6
54d94e