xserver-multidpi/os
Keith Packard 0b2f30834b os: Clean up WaitFor.c
Do all timer stuff before blocking, avoiding a bunch of duplicate code
and merge common code in WaitForSomething.

The WaitForSomething changes need a bit of explanation to show that
the new code is effectively equivalent to the old. Eliding error
checking and trivial bits we've got:

Before:

	if (ready clients)
		timeout = 0
	else
		compute timeout
	i = poll
	if (i <= 0) {
		if (ready clients)
			return TRUE;
		if (input)
			return FALSE;
		if (any ready timers) {
			run timers
			return FALSE;
		}
	} else {
		if (input)
			return FALSE;
		if (any ready timers) {
			run timers
			return FALSE;
		}
		if (ready clients)
			return TRUE;
	}

After:

	if (ready clients)
		timeout = 0;
	else
		compute timeout
		run_timers
	poll

	if (input)
		return FALSE;

	if (ready clients)
		return TRUE;

The old code would return TRUE if there were ready clients and input
pending. Dispatch would then schedule that ready client, but before
processing any requests, it would notice that there was input pending
and go process it. The new code just checks for input first, which is
effectively the same.

If the poll timed out and there weren't clients ready, then timers
would get run.

If the poll didn't time out, then timers would get run, even if there
were clients now ready. Now, if the timeout interval was zero, that
means that the timers must have been ready *before* poll was
invoked. In this case, we should simply run the timers before calling
poll -- no sense calling poll just to discard any data that it
generates.

If the timeout interval was non-zero, and poll didn't timeout, then
either there aren't any timers to run, or we got a surprise and hit a
timer exactly as a client became ready to run. This is the one case
where the new code is different from the old; the new code delays the
timer call until the next time WaitForSomething is called.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
2016-07-21 15:04:47 -04:00
..
.gitignore dix and os: gitignore dix.O and os.O 2011-09-23 17:14:47 -07:00
access.c Revert "XDMCP: For IPv6 add link local addresses to the end of the list" 2016-06-21 11:45:17 -04:00
auth.c os: support new implicit local user access mode [CVE-2015-3164 2/3] 2015-05-26 11:22:21 -07:00
backtrace.c Replace 'sun' with '__sun' 2015-11-30 11:51:22 -05:00
busfault.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
client.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
connection.c os: Remove CheckConnections 2016-07-21 15:04:47 -04:00
inputthread.c os: Use ospoll for input thread [v2] 2016-07-21 15:04:47 -04:00
io.c os: Switch server to poll(2) [v3] 2016-07-21 15:04:47 -04:00
log.c os: Failure to remove a non-existent log file is not an error 2016-01-06 12:23:31 -05:00
Makefile.am os: Add ospoll interface [v2] 2016-07-21 15:04:47 -04:00
mitauth.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
oscolor.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
osdep.h os: eliminate fd value limits for clients 2016-07-21 15:04:47 -04:00
osinit.c os: Leave stdin and stdout open 2016-07-21 15:04:47 -04:00
ospoll.c os: Add ospoll interface [v2] 2016-07-21 15:04:47 -04:00
ospoll.h os: Add ospoll interface [v2] 2016-07-21 15:04:47 -04:00
reallocarray.c Import reallocarray() from OpenBSD 2015-04-21 16:57:08 -07:00
rpcauth.c Replace 'sun' with '__sun' 2015-11-30 11:51:22 -05:00
strcasecmp.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
strcasestr.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
strlcat.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
strlcpy.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
strndup.c os: Ensure <dix-config.h> is included in strndup.c 2013-02-14 09:20:46 -08:00
utils.c Allow 1024 and 2048 for LimitClients 2016-07-21 15:04:47 -04:00
WaitFor.c os: Clean up WaitFor.c 2016-07-21 15:04:47 -04:00
xdmauth.c os: unifdef STREAMSCONN 2016-02-08 21:49:56 -05:00
xdmcp.c os: Switch server to poll(2) [v3] 2016-07-21 15:04:47 -04:00
xprintf.c os/xprintf: add Xvscnprintf and Xscnprintf 2012-05-03 14:59:23 +10:00
xserver_poll.c os: Add poll emulation for mingw [v2] 2016-07-19 11:08:21 -07:00
xsha1.c os/xsha1.c: Add license and copyright attribution. 2015-01-02 13:39:52 -08:00
xstrans.c Clean up a couple of warnings in os/ 2013-10-31 16:58:12 -07:00