Could it be that gdb was wrong in it's bt?  There dosen't seem to be a
select in that function.

--- Branden Robinson <[EMAIL PROTECTED]> wrote:
> retitle 246643 libx11-6: _XPollfdCacheDel() select()s forever when
> called by fglrx_dri.so
> tag 246643 + moreinfo upstream help
> thanks
> 
> On Fri, Apr 30, 2004 at 01:48:16AM -0500, Mike Mestnik wrote:
> > Package: libx11-6
> > Version: 4.3.0-7
> > Severity: normal
> > 
> > (gdb) bt
> > #0  0x403e3398 in select () from /lib/tls/libc.so.6
> > #1  0x4018de32 in _XPollfdCacheDel () from /usr/X11R6/lib/libX11.so.6
> > #2  0x4018eda1 in _XRead () from /usr/X11R6/lib/libX11.so.6
> > #3  0x4093c2d9 in s5943 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #4  0x40950593 in s3197 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #5  0x4094d984 in s3176 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #6  0x4094ccff in s5118 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #7  0x4094d02a in __driCreateScreen () from
> > /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #8  0x40123fda in AllocAndFetchScreenConfigs () from
> /usr/X11R6/lib/libGL.so.1
> > 
> > I also got this bt with DRI installed, but they do not replace
> libX11.so.
> > (gdb) bt
> > #0  0x4027d398 in select () from /lib/tls/libc.so.6
> > #1  0x40103e32 in _XPollfdCacheDel () from /usr/X11R6/lib/libX11.so.6
> > #2  0x40104da1 in _XRead () from /usr/X11R6/lib/libX11.so.6
> > #3  0x407dc2d9 in s5943 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #4  0x407f0593 in s3197 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #5  0x407ed984 in s3176 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #6  0x407eccff in s5118 () from
> /usr/X11R6/lib/modules/dri/fglrx_dri.so
> > #7  0x407ed02a in __driCreateScreen () from /usr/X11R6/lib/libGL.so.1
> 
> Well, here are the sources to _XRead() and _XPollfdCacheDel().  Both
> live in xc/lib/X11/XlibInt.c.
> 
> /* 
>  * _XRead - Read bytes from the socket taking into account incomplete
>  * reads.  This routine may have to be reworked if int < long.
>  */
> int _XRead (dpy, data, size)
>       register Display *dpy;
>       register char *data;
>       register long size;
> {
>       register long bytes_read;
> #ifdef XTHREADS
>       int original_size = size;
> #endif
> 
>       if ((dpy->flags & XlibDisplayIOError) || size == 0)
>           return 0;
>       ESET(0);
>       while ((bytes_read = _X11TransRead(dpy->trans_conn, data, (int)size))
>               != size) {
> 
>               if (bytes_read > 0) {
>                   size -= bytes_read;
>                   data += bytes_read;
>                   }
>               else if (ETEST()) {
>                   if (_XWaitForReadable(dpy) == -2)
>                       return -2; /* internal connection did XPutBackEvent */
>                   ESET(0);
>               }
> #ifdef SUNSYSV
>               else if (ECHECK(0)) {
>                   if (_XWaitForReadable(dpy) == -2)
>                       return -2; /* internal connection did XPutBackEvent */
>               }
> #endif
>               else if (bytes_read == 0) {
>                   /* Read failed because of end of file! */
>                   ESET(EPIPE);
>                   _XIOError(dpy);
>                   }
> 
>               else  /* bytes_read is less than 0; presumably -1 */ {
>                   /* If it's a system call interrupt, it's not an error. */
>                   if (!ECHECK(EINTR))
>                       _XIOError(dpy);
>                   }
>                }
> #ifdef XTHREADS
>        if (dpy->lock && dpy->lock->reply_bytes_left > 0)
>        {
>            dpy->lock->reply_bytes_left -= original_size;
>            if (dpy->lock->reply_bytes_left == 0) {
>              dpy->flags &= ~XlibDisplayReply;
>                UnlockNextReplyReader(dpy);
>          }
>        }
> #endif /* XTHREADS*/
>       return 0;
> }
> 
> /* ARGSUSED */
> void _XPollfdCacheDel(dpy, fd)
>     Display *dpy;
>     int fd;                   /* not used */
> {
> #ifdef USE_POLL
>     struct pollfd *pfp = (struct pollfd *)dpy->filedes;
>     struct _XConnectionInfo *conni;
> 
>     /* just recalculate whole list */
>     if (dpy->im_fd_length <= POLLFD_CACHE_SIZE) {
>       int loc = 1;
>       for (conni = dpy->im_fd_info; conni; conni=conni->next) {
>           pfp[loc].fd = conni->fd;
>           pfp[loc].events = POLLIN;
>           loc++;
>       }
>     }
> #endif
> }
> 
> Would someone like to eyeball the above?
> 
> -- 
> G. Branden Robinson                |    Humor is a rubber sword - it
> allows
> Debian GNU/Linux                   |    you to make a point without
> drawing
> [EMAIL PROTECTED]                 |    blood.
> http://people.debian.org/~branden/ |    -- Mary Hirsch
> 

> ATTACHMENT part 2 application/pgp-signature name=signature.asc




        
                
__________________________________
Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs  
http://hotjobs.sweepstakes.yahoo.com/careermakeover 


Reply via email to