input_force_unlock was mis-using input_mutex_lock and leaving it set
to -1. As this is  executed from OsInit at each server generation, on
the second time through, the mutex would be left locked (!) due to the
trylock call. This caused input to fail after the first server reset.

Signed-off-by: Keith Packard <[email protected]>
---
 os/inputthread.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/os/inputthread.c b/os/inputthread.c
index b6bbf35..390b66b 100644
--- a/os/inputthread.c
+++ b/os/inputthread.c
@@ -109,9 +109,10 @@ void
 input_force_unlock(void)
 {
     if (pthread_mutex_trylock(&input_mutex) == 0) {
+        input_mutex_count++;
         /* unlock +1 times for the trylock */
-        while (input_mutex_count-- >= 0)
-            pthread_mutex_unlock(&input_mutex);
+        while (input_mutex_count > 0)
+            input_unlock();
     }
 }
 
-- 
2.8.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to