OpenSolaris

Printable Version Enter a New Search
Bug ID 6815181
Synopsis RRSelectInput should check for DixRecieveAccess not DixWriteAccess
State 10-Fix Delivered:Verified (Fix available in build)
Category:Subcategory xserver:xorg-server
Keywords
Responsible Engineer Alan Coopersmith
Reported Against
Duplicate Of
Introduced In
Commit to Fix snv_111
Fixed In snv_111
Release Fixed solaris_nevada(snv_111)
Related Bugs 6802980
Submit Date 10-March-2009
Last Update Date 20-March-2009
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.)
Work Around
Disable the RANDR extension by either adding to your xorg.conf:

Section "Extensions"
    Option "RANDR" "Disable"
EndSection

or adding to your /usr/X11/lib/X11/xserver/TrustedExtensionsPolicy:

extension RANDR
Comments
N/A