summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2009-12-14 14:38:10 -0500
committerAdam Jackson <ajax@redhat.com>2011-01-20 21:08:17 -0500
commitf953ae7d8a578d135a6faaf69d9c06eae7c85ede (patch)
treef2108f3f05da90c8cfb47f7b7d310569dd20c98c
parentd127075da06239852c1cc745abfe63d0d180d984 (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>
-rw-r--r--os/WaitFor.c12
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;
}