The smart scheduler itimer currently always fires after each request
(which in turn causes the CPU to wake out of idle, burning precious
power). Rather than doing this, just stop the timer before going into
the select() portion of the WaitFor loop. It's a cheap system call, and
it will only get called if there's no more commands batched up from the
active fd.
This change also allows some of the functions to be simplified;
setitimer() will only fail if it's passed invalid data, and we don't do
that... so make it void and remove all the conditional code that deals
with failure.
The change also allows us to remove a few variables that were used for
housekeeping between the signal handler and the main loop.
Signed-off-by: Keith Packard <keithp@koto.keithp.com>
* GL/glx/glxvisuals.c: added boolean to disable
calling init_visuals(). This gives a chance to Xephyr
to take over visuals manipulation and avoid a crash at
server shutdown in __glXMesaScreenDestroy(), due to the fact
that mesa might sees more visual than what it has actually created in
init_visuals(). It might see more visuals because Xephyr can augment
the number of visuals, dynamically.
* os/utils.c: the boolean is actually defined here.
Because our "popen" implementation uses stdio, and because nobody's stdio
library is capable of surviving signals, we need to make absolutely sure
that we hide the SIGALRM from the smart scheduler. Otherwise, when you
open a menu in openoffice, and it recompiles XKB to deal with the
accelerators, and you popen xkbcomp because we suck, then the scheduler
will tell you you're taking forever doing something stupid, and the
wait() code will get confused, and input will hang and your CPU usage
slams to 100%. Down, not across.
This adds a bit of glue to configure.ac to support launchd detection;
on OS X (or other platforms which choose to implement launchd), this allows
the system to automagically start the Xserver as necessary to serve clients.
MAXBUFSIZE appears to be a leftover of some previous time. Instead, just
use maxBigRequestSize when bigreqs are available (limiting buffers to ~16MB).
When bigreqs are not available, needed won't be larger than the maximum
size of a non-bigreqs request (256kB).
Before you complain, this code hasn't seen material change since at least
X11R6. It certainly does not build with any modern version of Kerberos.
Anybody wanting krb5 auth to their X server should probably be using
GSSAPI instead of internal krb5 API anyway.
This adds (unconditional) support for the GE extension. Anything from now on
that sends events in MPX will have to use the GE extension. No GE, no MPX
events. GE is not actually used yet from anywhere with this commit.
You will need to update x11proto, xextproto, libX11, libXext and xcb to the
matching xge branches. Things will _NOT_ work without the updated protocol
headers and libraries.
arbitrary X status codes instead of just TRUE/FALSE.
The dix layer in most cases still does not propagate the return value of
XACE hooks back to the client, however. There is more error propagation
work to do.
Default core size limit for most environments is 0, which disables core
dumps. Add code in the -core option processing path to set the core limit to
the maximum value.
The former <X11/extensions/XKBsrv.h> has been pulled into the server now as
include/xkbsrv.h, and the world updated to look for it in the new place,
since it made no sense to define server API in an extension header. Any
further work along this line will need to do similar things with XKBgeom.h
and friends.
This keeps us from having to define _POSIX_C_SOURCE, _BSD_SOURCE, and
_XOPEN_SORUCE to get the C environment we want in different places. It also
fixes the build on linux due to RTLD_DEFAULT having not been defined.
automake will not stop whining about the *.O files not being in normal library
name format, so just tell automake they are PROGRAMS so it builds them without
bitching.
Solaris headers are very literal - if you ask for POSIX_C_SOURCE 199309L,
they limit to only the functions in that standard and no more, unless you
also specify __EXTENSIONS__ to allow functions beyond the standard base.
Only rewind time when we're more than (original delta + 250ms) away from
executing the timer.
When we're walking the timer list, use a goto to iterate all of them from
the start again, since timers may drop out of the list.
Don't bother trying to be smart in TimerSet, we'll pick it up in
WaitForSomething anyway.
We don't actually need to get the CPU clock ID, which means we don't need
the monotonic_usable test. Since there's now only one branch, the
compiler will treat that as likely, so we don't need xproto 7.0.9 anymore.
The fallthrough to gettimeofday() is preserved.
Add support for CLOCK_MONOTONIC from clock_gettime, and use that in
GetTimeInMillis() if available, falling back to the old gettimeofday()
implementation.
This is _slightly_ faster on some 64-bit architectures, and _slightly_
slower on others (though barely measurable).
Also move LookupDeviceIntRec into the DIX, and add InputOption type, and
NewInputDeviceRequest prototype (DIX requests DDX to add a device). Does not
link without an implemented NIDR.
Get rid of almost all uses of these definitions. They're still defined for
delinquent out-of-tree drivers, and also for the Mesa build. As well as
for miinitext.c. But largely gone.
(Since all use is inside the xserver module, might as well keep the header
in the Xserver module instead of in proto/XExt to allow easier synchronization
of updates.)
Add the server side implementation of the ScreenSaverSuspend request.
Require scrnsaverproto >= 1.1, and change the linking order of the Xorg
static libs.
Add XSERV_t, TRANS_SERVER, TRANS_REOPEN to quash warnings.
Add #include <dix-config.h> or <xorg-config.h>, as appropriate, to all
source files in the xserver/xorg tree, predicated on defines of
HAVE_{DIX,XORG}_CONFIG_H. Change all Xfont includes to
<X11/fonts/foo.h>.
xc/programs/Xserver/Xext/Imakefile
xc/programs/Xserver/dix/Imakefile
xc/programs/Xserver/dix/main.c
xc/programs/Xserver/dix/xpstubs.c
xc/programs/Xserver/mi/miinitext.c
//bugs.freedesktop.org/show_bug.cgi?id=2792) attachment #2526
(https://bugs.freedesktop.org/attachment.cgi?id=2526) bug 2792 part II:
Make Xprint headers in dix/, mi/, os/ and Xext/ conditional on whether
the Xprint extension is build or not. Patch by Egbert Eich
<eich@freedesktop.org> and Roland Mainz <roland.mainz@nrubsig.org>.
change "foo.h" to <X11/foo.h> for core headers, e.g. X.h, Xpoll.h;
change "foo.h", "extensions/foo.h" and "X11/foo.h" to
<X11/extensions/foo.h> for extension headers, e.g. Xv.h;
change "foo.[ch]" to <X11/Xtrans/foo.[ch]> for Xtrans files.
xc/programs/Xserver/Xprint/DiPrint.h
xc/programs/Xserver/Xprint/Imakefile
xc/programs/Xserver/Xprint/Init.c
xc/programs/Xserver/Xprint/ddxInit.c
xc/programs/Xserver/dix/Imakefile
xc/programs/Xserver/dix/main.c
xc/programs/Xserver/dix/xpstubs.c
xc/programs/Xserver/os/Imakefile
//bugs.freedesktop.org/show_bug.cgi?id=2792) attachment #2193
(https://bugs.freedesktop.org/attachment.cgi?id=2193) Fix build bustage
when |PrintOnlyServer| is set to |NO|. Patch by Roland Mainz
<roland.mainz@nrubsig.org> and Julien Lafon <julien.lafon@gmail.com>.
platforms.
Compress all font encodings (Stefan Dirsch).
Fixed warnings.
Turn on forwarding XNSpotLocation event to XIM server in OffTheSpot and
Root mode (bugzilla #1580, James Su).
Added another compose key combination for the Euro symbol (Stefan Dirsch).
Added support for UTF-8 in ja_JP, ko_KR and zh_TW locales (Mike Fabian).
Changed default encoding for ru from KOI8-R to ISO8859-5 (Mike Fabian).
This is the encoding that is also used by glibc. We may break other
libcs - lets see who complains.
Added explanation for DESTDIR to install to a different directory than /.
Added some early bailouts to atiprobe if PCI structure pointer is NULL to
prevent sig11.
XV support doesn't depend on 2D acceleration any more. This patch removes
this limitation from the NSC driver. This is a patch that I have
committed to XFree86 a while ago but never ported over to X.Org.
Matthieu Herrb contributed some build fixes.
Fixing SetDPMSTimers() so that DPMS*Time == 0 disables the appropriate
timer. This takes advantage of the fact that TimerSet() with a timeout
argument 0 behaves like TimerCanel().
Use /dev/xconsole (named pipe) or devpts for system logger (Werner Fink).
Create missing links for backward compatibility to XFree86 (Stefan Dirsch).
Changed comment to mention xorg.
Changed cursor for the 'kill' action from XC_draped_box to XC_Pirate. If
you don't like it we can change it back (original author unkown).
Added 'pic' to the man page rendering command pipeline (Werner Fink).
Added missing return value (Stefan Dirsch, Roland Mainz)