diff options
author | Adam Jackson <ajax@redhat.com> | 2009-12-14 14:38:10 -0500 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2011-01-20 21:08:17 -0500 |
commit | f953ae7d8a578d135a6faaf69d9c06eae7c85ede (patch) | |
tree | f2108f3f05da90c8cfb47f7b7d310569dd20c98c /os/WaitFor.c | |
parent | d127075da06239852c1cc745abfe63d0d180d984 (diff) |
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 <keithp@keithp.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'os/WaitFor.c')
-rw-r--r-- | os/WaitFor.c | 12 |
1 files 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; } |