Can you please put the XQuartz mutex lock inside of the inProcessInputEvents grab/release. I know the number of instructions is small, but there's no reason to hold the lock when checking or setting inProcessInputEvents. It's a mutex on miEventQueue.
Thanks, Jeremy On Jun 14, 2012, at 9:15 AM, Andy Ritger <[email protected]> wrote: > Also, remove the unnecessary static qualifier on mieqProcessInputEvents()'s > 'event' local variable. > > Signed-off-by: Andy Ritger <[email protected]> > --- > mi/mieq.c | 16 +++++++++++++++- > 1 files changed, 15 insertions(+), 1 deletions(-) > > diff --git a/mi/mieq.c b/mi/mieq.c > index e117a8d..8339afb 100644 > --- a/mi/mieq.c > +++ b/mi/mieq.c > @@ -569,14 +569,25 @@ mieqProcessInputEvents(void) > { > EventRec *e = NULL; > ScreenPtr screen; > - static InternalEvent event; > + InternalEvent event; > DeviceIntPtr dev = NULL, master = NULL; > size_t n_enqueued; > + static Bool inProcessInputEvents = FALSE; > > #ifdef XQUARTZ > pthread_mutex_lock(&miEventQueueMutex); > #endif > > + /* > + * report an error if mieqProcessInputEvents() is called recursively; > + * this can happen, e.g., if something in the mieqProcessDeviceEvent() > + * call chain calls UpdateCurrentTime() instead of UpdateCurrentTimeIf() > + */ > + if (inProcessInputEvents) { > + ErrorF("[mi] mieqProcessInputEvents() called recursively.\n"); > + } > + inProcessInputEvents = TRUE; > + > /* Grow our queue if we are reaching capacity: < 2 * QUEUE_RESERVED_SIZE > remaining */ > n_enqueued = mieqNumEnqueued(&miEventQueue); > if (n_enqueued >= (miEventQueue.nevents - (2 * QUEUE_RESERVED_SIZE)) && > @@ -631,6 +642,9 @@ mieqProcessInputEvents(void) > pthread_mutex_lock(&miEventQueueMutex); > #endif > } > + > + inProcessInputEvents = FALSE; > + > #ifdef XQUARTZ > pthread_mutex_unlock(&miEventQueueMutex); > #endif > -- > 1.7.7 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
