|
Description
|
While tracking down problems with GTK+ applications starting up under
Solaris Trusted Extensions since our move from Xorg 1.3 to 1.5.3 (see CR
6802980), we've found that the root cause seems to be that ProcRRSelectInput
is requesting we check for DixWriteAccess to write to the window (line 79 of
randr/rrdispatch.c), while the normal XSelectInput() is handled via
ProcChangeWindowAttributes, which checks for DixReceiveAccess for
requesting events from the window.
Checking with X.Org community developers, they agree this is a mistake and
have fixed it in git master:
http://cgit.freedesktop.org/xorg/xserver/commit/?id=6544490700051b3b5e88ac1890d71b35634c9100
This fix should be applied to our tree. (This doesn't fix all the problems
discussed in 6802980, hence the separate bug report, so this fix can be
integrated while that investigation continues.)
*** Test Case ***
Save the following dtrace script to a file called testcase.d:
-----------------------
#! /usr/sbin/dtrace -s
pid$1::ProcRRSelectInput:entry
{
self->trace = 1;
trace("entered ProcRRSelectInput");
}
pid$1::ProcRRSelectInput:return
/self->trace/
{
self->trace = 0;
trace("finished ProcRRSelectInput");
}
pid$1::dixLookupWindow:entry
/self->trace/
{
printf("dixLookupWindow(%x, %x, %d, %x)\n", arg0, arg1, arg2, arg3);
}
pid$1::dixLookupWindow:return
/self->trace/
{
printf("dixLookupWindow returned %d\n", arg1);
}
-----------------------
Run: chmod +x testcase.d
Login to a GNOME session on the test system
Open a terminal window, su to root and run:
./testcase.d `pgrep Xorg`
Right click on the desktop background and bring up the Desktop Resolution
panel. The dtrace script should output text like:
dtrace: script '/home/alanc/bugs/6815181/testcase.d' matched 4 probes
CPU ID FUNCTION:NAME
0 82026 ProcRRSelectInput:entry entered ProcRRSelectInput
0 82028 dixLookupWindow:entry dixLookupWindow(fffffd7fffdffce0, 1a6, 15307824, 800000)
0 82029 dixLookupWindow:return dixLookupWindow returned 0
0 82027 ProcRRSelectInput:return finished ProcRRSelectInput
In the dixLookupWindow:entry line, if the fix is present, the last number
should be 800000, not 2. In the the dixLookupWindow:return line, it should
return 0. (On a non-TX system it should return 0 even without the fix -
on a TX system, it will be returning non-0 before the fix, 0 after the fix.)
|