Hi, > > 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.hutte...@who-t.net> > > --- > > include/input.h | 1 + > > os/inputthread.c | 7 +++++++ > > os/io.c | 6 ++++++ > > 3 files changed, 14 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..933bc1c 100644 > > --- a/os/inputthread.c > > +++ b/os/inputthread.c > > @@ -90,6 +90,12 @@ static pthread_mutex_t input_mutex; > > static Bool input_mutex_initialized; > > #endif > > > > +int > > +in_input_thread(void) > > +{ > > + return pthread_equal(pthread_self(), inputThreadInfo->thread); > > +} > > + > > void > > input_lock(void) > > { > > @@ -531,6 +537,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..5494b30 100644 > > --- a/os/io.c > > +++ b/os/io.c > > @@ -643,6 +643,9 @@ SetCriticalOutputPending(void) > > * this routine as int. > > *****************/ > > > > +extern inline int > > +in_input_thread(void); > > + > > int > > WriteToClient(ClientPtr who, int count, const void *__buf) > > { > > @@ -651,6 +654,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 > > -- > > 2.9.3 > > It works a treat, brilliant - Within not even a second approaching the stylus > to the tablet, Xorg was logging messages about calling WriteToClient() from > the input thread, it's just awesome! > > Tested-by: Olivier Fourdan <ofour...@redhat.com> > > And if I'd dare, fwiw, it looks good to me. > > Reviewed-by: Olivier Fourdan <ofour...@redhat.com> ^^^^^^^^^^^
Err, nope! I take that back, sorry, looks like it's causing trouble to Xwayland... it crashes. > +int > +in_input_thread(void) > +{ > + return pthread_equal(pthread_self(), inputThreadInfo->thread); > +} If this gets called *before* the InputThread is even created, inputThreadInfo is NULL. I would add a if (!inputThreadInfo) return 0; Otherwise Xwayland crashes at startup. With something like that added, it works :) Cheers, Olivier _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel