From f953ae7d8a578d135a6faaf69d9c06eae7c85ede Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Mon, 14 Dec 2009 14:38:10 -0500 Subject: [PATCH] os: Reduce smart scheduler setup calls We can return from WaitForSomething with no clients ready for any number of reasons. There's no reason to set up the scheduler timer when this happens. Reviewed-by: Keith Packard Signed-off-by: Adam Jackson --- os/WaitFor.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/os/WaitFor.c b/os/WaitFor.c index e66300490..867cb04b8 100644 --- a/os/WaitFor.c +++ b/os/WaitFor.c @@ -153,13 +153,17 @@ WaitForSomething(int *pClientsReady) fd_set clientsWritable; int curclient; int selecterr; - int nready; + static int nready; fd_set devicesReadable; CARD32 now = 0; Bool someReady = FALSE; FD_ZERO(&clientsReadable); + if (nready) + SmartScheduleStopTimer(); + nready = 0; + /* We need a while loop here to handle crashed connections and the screen saver timeout */ while (1) @@ -211,7 +215,6 @@ WaitForSomething(int *pClientsReady) } XFD_COPYSET(&AllSockets, &LastSelectMask); } - SmartScheduleStopTimer (); BlockHandler((pointer)&wt, (pointer)&LastSelectMask); if (NewOutputPending) @@ -230,7 +233,6 @@ WaitForSomething(int *pClientsReady) } selecterr = GetErrno(); WakeupHandler(i, (pointer)&LastSelectMask); - SmartScheduleStartTimer (); if (i <= 0) /* An error or timeout occurred */ { if (dispatchException) @@ -388,6 +390,10 @@ WaitForSomething(int *pClientsReady) #endif } } + + if (nready) + SmartScheduleStartTimer(); + return nready; }