From d2a6962474978437545120ebc1fcfb909d901d55 Mon Sep 17 00:00:00 2001 From: Andy Ritger Date: Wed, 20 Jun 2012 11:52:34 -0700 Subject: [PATCH] mi: Log an error if mieqProcessInputEvents() recurses. v2: Uses BUG_WARN_MSG to also provide a stack trace. (Peter Hutterer) Signed-off-by: Keith Packard Signed-off-by: Andy Ritger --- mi/mieq.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mi/mieq.c b/mi/mieq.c index f7d8721e1..01812bdeb 100644 --- a/mi/mieq.c +++ b/mi/mieq.c @@ -579,11 +579,20 @@ mieqProcessInputEvents(void) 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() + */ + BUG_WARN_MSG(inProcessInputEvents, "[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)) && @@ -642,6 +651,9 @@ mieqProcessInputEvents(void) pthread_mutex_lock(&miEventQueueMutex); #endif } + + inProcessInputEvents = FALSE; + #ifdef XQUARTZ pthread_mutex_unlock(&miEventQueueMutex); #endif