xinit hangs on XWin infinite loop when using -displayfd

Jon TURNEY jon.turney@dronecode.org.uk
Mon Jul 28 12:35:00 GMT 2014


Thanks for reporting this problem.

On 21/07/2014 18:30, Matt D. wrote:
> I found as a workaround to add the arguments "-nolisten tcp" when
> invoking xinit. However, I was under the impression that it was
> incompatible with -multiwindow and -clipboard, both of which seem to be
> working fine:
>
> https://cygwin.com/ml/cygwin-xfree/2009-05/msg00016.html

That restriction no longer exists.

https://cygwin.com/ml/cygwin-xfree/2009-10/msg00007.html

> On 7/21/2014 12:00 PM, Matt D. wrote:
>> Ok.. so I let xinit do its thing to see if it got anywhere. Eventually
>> it will pop and error box. Interestingly, I specified a displayfd value
>> of "3" and yet both the popup and the log are reporting "5":

This is expected.  xinit must know the display number of the X server it 
starts, so it can pass it on to any clients it starts, so it has a patch 
which should notice the -displayfd option, transparently use it to 
determine the display number for any clients they start, and then pass 
on the display number to the specified file descriptor

>> My XWin.0.log is about 15MB of repeated attempts to open a socket. Here
>> is a snippet. I hope this helps:
>>
>> InitConnectionLimits: MaxClients = 255
>> Welcome to the XWin X Server
>> Vendor: The Cygwin/X Project
>> Release: 1.15.1.0
>> OS: CYGWIN_NT-5.1 matthew-17ffb52 1.7.30(0.272/5/3) 2014-05-23 10:36 i686
>> OS: Windows XP Service Pack 3 [Windows NT 5.1 build 2600] (Win32)
>> Snapshot: 20140709-git-2e9c13ea41c51df7
>>
>> XWin was started with the following command line:
>>
>> X -displayfd 5
>>
>> ddxProcessArgument - Initializing default screens
>> winInitializeScreenDefaults - primary monitor w 1062 h 703
>> winInitializeScreenDefaults - native DPI x 96 y 96
>> ddxProcessArgument - arg: -displayfd
>> Trying to create socket for display number 0
>> _XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
>> _XSERVTransOpen: transport open failed for inet6/matthew-17ffb52:0
>> _XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6
>>
>> ..
>> Trying to create socket for display number 59534
>> _XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
>> _XSERVTransOpen: transport open failed for inet6/matthew-17ffb52:59534
>> _XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6
>> (EE) Fatal server error:
>> (EE) Failed to find a socket to listen on(EE)
>> [ 58128.390] (EE) Server terminated with error (1). Closing log file.

Ah.  So, it seems that we have checked all ports from 6000 to 59534 + 
6000 = 65534 and decided they are no good because we can't open an ipv6 
socket.

(It looks like there is another minor bug here in that we don't try port 
65535! :-))

I guess if you just run XWin, it reports that it can't create an inet6 
listener, but it continues anyway (unless the -nopn option is used).

But, the implementation of -displayfd requires that creating all the 
listener socket succeeds.  (It's not clear that this should be changed, 
otherwise we could reach the conclusion that it's ok to start a server 
on display n with a limited set of protocols, when a server already 
exists on display n with an non-intersecting set of protocols)

So, you may find that -nolisten inet6, rather than -nolisten tcp (which 
prevents both ipv4 and ipv6 listening) also works around the problem.

You might want to also investigate why inet6 sockets can't be opened.

-- 
Jon TURNEY
Volunteer Cygwin/X X Server maintainer

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://x.cygwin.com/docs/
FAQ:                   http://x.cygwin.com/docs/faq/



More information about the Cygwin-xfree mailing list