Strange behaviour of X Driver

Robert Lunnon bobl at optushome.com.au
Fri Oct 8 18:21:26 CDT 2004


I have some strange behaviour occurring on Solaris 10 I am getting XIO errors

I Did a syscal trace and got this in part \


 uname(0x7FD5EA54)                               = 1
uname(0x7FD5EB24)                               = 1
xstat(2, "/tmp/.X11-pipe/X0", 0x7FD5EF64)       = 0
open("/tmp/.X11-pipe/X0", O_RDWR)               = 11
ioctl(11, I_CANPUT, 0x00000000)                 = 1
uname(0x7FD5EA94)                               = 1
uname(0x7FD5EAC4)                               = 1
fcntl(11, F_SETFD, 0x00000001)                  = 0
access("/usr2/robert/.Xauthority", R_OK)        = 0
open("/usr2/robert/.Xauthority", O_RDONLY)      = 14
fstat64(14, 0x7FD5EC40)                         = 0
fstat64(14, 0x7FD5EB80)                         = 0
ioctl(14, TCGETA, 0x7FD5EC14)                   Err#25 ENOTTY
read(14, "\0\0\004C0A80305\001 0\0".., 8192)    = 1174
read(14, 0x080C413C, 8192)                      = 0
llseek(14, 0, SEEK_CUR)                         = 1174
close(14)                                       = 0
writev(11, 0x7FD5F6F4, 4)                       = 48
fcntl(11, F_GETFL)                              = 2
fcntl(11, F_SETFL, FWRITE|FNONBLOCK)            = 0
read(11, 0x7FD5F7AC, 8)                         Err#11 EAGAIN
XIO:  fatal IO error write(2, " X I O :     f a t a l  ".., 21) = 21
0 (write(2, " 0   (", 3)                                = 3
Error 0write(2, " E r r o r   0", 7)                    = 7
) on X server "write(2, " )   o n   X   s e r v e".., 15)       = 15
:0.0write(2, " : 0 . 0", 4)                             = 4
"
write(2, " "\r\n", 3)                           = 3
      after write(2, "             a f t e r  ", 12)    = 12
0write(2, " 0", 1)                              = 1
 requests (write(2, "   r e q u e s t s   (", 11)               = 11
0write(2, " 0", 1)                              = 1
 known processed) with write(2, "   k n o w n   p r o c e".., 23)       = 23
0write(2, " 0", 1)                              = 1
 events remaining.
write(2, "   e v e n t s   r e m a".., 20)      = 20
_exit(1)

The last X IO operation before the  fatal error was called was  a read n the X 
pipe which return error EAGAIN

The Man page for read(2) says the following

   When attempting to read from an empty pipe (or FIFO):

        o  If no process has the pipe open  for  writing,  read()
           returns 0 to indicate end-of-file.

        o  If some process has the  pipe  open  for  writing  and
           O_NDELAY is set, read() returns 0.

        o  If some process has the  pipe  open  for  writing  and
           O_NONBLOCK is set, read() returns -1 and sets errno to
           EAGAIN.


So, Its quite possible, likely that the  X Server has the pipe open for 
writing but  the pipe is empty which would return EAGAIN, why is this then 
treated as an error ???

More later....
Bob



More information about the wine-devel mailing list