On Mon, Jul 17, 2017 at 5:28 PM, Peter Hutterer
<peter.hutte...@who-t.net> wrote:
> If the device is unplugged, the fd triggers in select/poll/... but comes back
> with ENODEV. This triggers a lot of error messages in the log until finally
> the udev code catches up with us and the device is removed properly.
>
> Catch that case by removing the fd from the select() set so we don't get
> triggered to call read_input on it anymore.
>
> https://sourceforge.net/p/linuxwacom/bugs/337/

Thank you Peter for your support. Somehow I thought the patch has been
merged. But it is not. The patch is:

> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>

Tested-by: crocket <crockabisc...@gmail.com>
Reviewed-by: Ping Cheng <ping.ch...@wacom.com>

Please merge it, Peter.

Cheers,
Ping

> ---
>  src/xf86Wacom.c | 12 +++++++++---
>  src/xf86Wacom.h |  2 +-
>  2 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
> index 738690f..1eb3f57 100644
> --- a/src/xf86Wacom.c
> +++ b/src/xf86Wacom.c
> @@ -632,7 +632,8 @@ static void wcmDevReadInput(InputInfoPtr pInfo)
>                 if (!wcmReady(pInfo)) break;
>
>                 /* dispatch */
> -               wcmReadPacket(pInfo);
> +               if (!wcmReadPacket(pInfo))
> +                       break;
>         }
>
>  #ifdef DEBUG
> @@ -649,7 +650,7 @@ static void wcmDevReadInput(InputInfoPtr pInfo)
>  #endif
>  }
>
> -void wcmReadPacket(InputInfoPtr pInfo)
> +Bool wcmReadPacket(InputInfoPtr pInfo)
>  {
>         WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
>         WacomCommonPtr common = priv->common;
> @@ -672,7 +673,10 @@ void wcmReadPacket(InputInfoPtr pInfo)
>                 if (errno != EAGAIN && errno != EINTR)
>                         LogMessageVerbSigSafe(X_ERROR, 0,
>                                               "%s: Error reading wacom device 
> : %s\n", pInfo->name, strerror(errno));
> -               return;
> +               if (errno == ENODEV)
> +                       xf86RemoveEnabledDevice(pInfo);
> +
> +               return FALSE;
>         }
>
>         /* account for new data */
> @@ -704,6 +708,8 @@ void wcmReadPacket(InputInfoPtr pInfo)
>         }
>
>         common->bufpos = len;
> +
> +       return TRUE;
>  }
>
>  int wcmDevChangeControl(InputInfoPtr pInfo, xDeviceCtl * control)
> diff --git a/src/xf86Wacom.h b/src/xf86Wacom.h
> index afb4e9e..ccc2d56 100644
> --- a/src/xf86Wacom.h
> +++ b/src/xf86Wacom.h
> @@ -120,7 +120,7 @@ char *wcmEventAutoDevProbe (InputInfoPtr pInfo);
>  int wcmInitTablet(InputInfoPtr pInfo, const char* id, float version);
>
>  /* standard packet handler */
> -void wcmReadPacket(InputInfoPtr pInfo);
> +Bool wcmReadPacket(InputInfoPtr pInfo);
>
>  /* handles suppression, filtering, and dispatch. */
>  void wcmEvent(WacomCommonPtr common, unsigned int channel, const 
> WacomDeviceState* ds);
> --
> 2.13.0
>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to