[Cairo] Odd crash in cairo-demo/xrspline

Eric Christopherson rakko at charter.net
Tue Jul 29 13:46:59 PDT 2003


On Mon, Jul 28, 2003 at 07:48:32PM -0400, Carl Worth wrote:
> On Jul 28, Eric Christopherson wrote:
>  > I seem to suffer a consistently reproducible crash when running the demo
>  > program xrspline. Upon running it, the X server itself crashes hard; it
>  > doesn't do any cleanup such as setting the keyboard or video back to their
>  > old states.
> 
> The server crash is obviously a bad sign. Cairo should not be able to
> crash the server so there is at least a bug in the server or driver
> somewhere, (not to say that there isn't a Cairo bug tickling it).
> 
>  > 648             if (!XPending(win->dpy) && win->needs_refresh) {
> 
> My guess is the XPending call is causing previous requests to flush
> and one of those is actually triggering the problem. Why don't you try
> adding the following call right before the call to win_init:
> 
> 	XSynchronize (dpy, 1);
> 
> That might give a little more insight into what's causing the server
> such grief.
[snip]

I've run another test after adding that, and getting librender and
libXrender from CVS. The end of the gdb log now looks like:


XRenderFindStandardFormat (dpy=0x804b340, format=134532248) at Xrender.c:821
821     }
0x400dd3d2 in XcCompositeTrapezoids (op=3, src=0x804d4e8, dst=0x804cb70,
xSrc=49, ySrc=-32767, traps=0x804eb38, ntraps=33) at xc.c:140
140             XRenderCompositeTrapezoids (dst->dpy, op, src->picture,
dst->picture,
XRenderCompositeTrapezoids (dpy=0x804b340, op=3, src=16777224, dst=16777220,
maskFormat=0x804cc98, xSrc=49, ySrc=-32767, traps=0x804eb38, ntrap=33) at
Trap.c:38
38          XRenderExtDisplayInfo         *info = XRenderFindDisplay (dpy);
XRenderFindDisplay (dpy=0x804b340) at Xrender.c:283
283         dpyinfo = XRenderExtFindDisplay (&XRenderExtensionInfo, dpy);
XRenderExtFindDisplay (extinfo=0x40153610, dpy=0x804b340) at Xrender.c:47
47          if ((dpyinfo = extinfo->cur) && dpyinfo->display == dpy) 
41      {
47          if ((dpyinfo = extinfo->cur) && dpyinfo->display == dpy) 
41      {
47          if ((dpyinfo = extinfo->cur) && dpyinfo->display == dpy) 
58                  return dpyinfo;
64      }
XRenderFindDisplay (dpy=0x804b340) at Xrender.c:284
284         if (!dpyinfo)
288     }
XRenderCompositeTrapezoids (dpy=0x804b340, op=3, src=16777224, dst=16777220,
maskFormat=0x804cc98, xSrc=49, ySrc=-32767, traps=0x804eb38, ntrap=33) at
Trap.c:42
42          unsigned long           max_req = dpy->bigreq_size ?
dpy->bigreq_size : dpy->max_request_size;
44          RenderSimpleCheckExtension (dpy, info);
45          LockDisplay(dpy);
46          while (ntrap)
48              GetReq(RenderTrapezoids, req);
49              req->reqType = info->codes->major_opcode;
48              GetReq(RenderTrapezoids, req);
49              req->reqType = info->codes->major_opcode;
50              req->renderReqType = X_RenderTrapezoids;
51              req->op = (CARD8) op;
53              req->dst = dst;
54              req->maskFormat = maskFormat ? maskFormat->id : 0;
52              req->src = src;
53              req->dst = dst;
54              req->maskFormat = maskFormat ? maskFormat->id : 0;
48              GetReq(RenderTrapezoids, req);
52              req->src = src;
54              req->maskFormat = maskFormat ? maskFormat->id : 0;
59              if (len > (max_req - req->length)) {
55              req->xSrc = xSrc;
54              req->maskFormat = maskFormat ? maskFormat->id : 0;
57              n = ntrap;
56              req->ySrc = ySrc;
55              req->xSrc = xSrc;
57              n = ntrap;
59              if (len > (max_req - req->length)) {
58              len = ((long) n) * (SIZEOF (xTrapezoid) >> 2);
59              if (len > (max_req - req->length)) {
56              req->ySrc = ySrc;
59              if (len > (max_req - req->length)) {
58              len = ((long) n) * (SIZEOF (xTrapezoid) >> 2);
59              if (len > (max_req - req->length)) {
63              SetReqLen (req, len, len);
65              DataInt32 (dpy, (int *) traps, len);
64              len <<= 2;
65              DataInt32 (dpy, (int *) traps, len);
67              traps += n;
65              DataInt32 (dpy, (int *) traps, len);
67              traps += n;
69          UnlockDisplay(dpy);
70          SyncHandle();
0x401508f4      71      }
X connection to :0.0 broken (explicit kill or server shutdown).



Does this help anyone tell what might be going on?

-- 
Furrfu!		r a k k o  at  c h a r t e r  dot  n e t




More information about the cairo mailing list