[PATCH v2 xserver] os: log a bug whenever WriteToClient is called from the input thread
Olivier Fourdan
ofourdan at redhat.com
Fri Feb 24 08:14:31 UTC 2017
> The input thread should generate events, not send them. Make it easier to
> find the instances where it's doing so.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> Tested-by: Olivier Fourdan <ofourdan at redhat.com>
> ---
> Changes to v1:
> - add check for InputThreadInfo to avoid null-pointer dereference
> - remove leftover declaration for in_input_thread
>
> include/input.h | 1 +
> os/inputthread.c | 8 ++++++++
> os/io.c | 3 +++
> 3 files changed, 12 insertions(+)
>
> diff --git a/include/input.h b/include/input.h
> index bb58b22..6c9e45d 100644
> --- a/include/input.h
> +++ b/include/input.h
> @@ -722,6 +722,7 @@ extern _X_HIDDEN void input_constrain_cursor(DeviceIntPtr
> pDev, ScreenPtr screen
> extern _X_EXPORT void input_lock(void);
> extern _X_EXPORT void input_unlock(void);
> extern _X_EXPORT void input_force_unlock(void);
> +extern _X_EXPORT int in_input_thread(void);
>
> extern void InputThreadPreInit(void);
> extern void InputThreadInit(void);
> diff --git a/os/inputthread.c b/os/inputthread.c
> index 4400fba..e7159c7 100644
> --- a/os/inputthread.c
> +++ b/os/inputthread.c
> @@ -90,6 +90,13 @@ static pthread_mutex_t input_mutex;
> static Bool input_mutex_initialized;
> #endif
>
> +int
> +in_input_thread(void)
> +{
> + return inputThreadInfo &&
> + pthread_equal(pthread_self(), inputThreadInfo->thread);
> +}
> +
> void
> input_lock(void)
> {
> @@ -531,6 +538,7 @@ void input_force_unlock(void) {}
> void InputThreadPreInit(void) {}
> void InputThreadInit(void) {}
> void InputThreadFini(void) {}
> +int in_input_thread(void) { return 0; }
>
> int InputThreadRegisterDev(int fd,
> NotifyFdProcPtr readInputProc,
> diff --git a/os/io.c b/os/io.c
> index be85226..8aa51a1 100644
> --- a/os/io.c
> +++ b/os/io.c
> @@ -651,6 +651,9 @@ WriteToClient(ClientPtr who, int count, const void
> *__buf)
> int padBytes;
> const char *buf = __buf;
>
> + BUG_RETURN_VAL_MSG(in_input_thread(), 0,
> + "******** %s called from input thread *********\n",
> __func__);
> +
> #ifdef DEBUG_COMMUNICATION
> Bool multicount = FALSE;
> #endif
Looks good to me :)
Reviewed-by: Olivier Fourdan <ofourdan at redhat.com>
Cheers,
Olivier
More information about the xorg-devel
mailing list