Created attachment 32656 [details] [review] flush: fix crash; if QPainter pointer is NULL(lost, wtf?!) do not try to access I built firefox with cairo-qt and found some bugs. I am going to attach a patch for each of the three cases I encountered. The fourth case where XErrors happen I can just guess that it comes from the xlib-render hack.
Created attachment 32657 [details] [review] flush: only call QPainter::end() & QPainter::begin() if we own QPainter pointer; otherwise call QPainter::restore()
Created attachment 32658 [details] [review] finish: remove call to QPainter::restore() here; see patch above
O, well, 'cairo_qpainter_' should be replaced with 'cairo_qt_' in the patches. $ sed -e "s/cairo_qpainter_/cairo_qt_/g" -i qt-*.diff The XErrors I see are: X Error: BadMatch (invalid parameter attributes) 8 Extension: 149 (RENDER) Minor opcode: 4 (RenderCreatePicture) Resource id: 0x104 X Error: RenderBadPicture (invalid Picture parameter) 171 Extension: 149 (RENDER) Minor opcode: 23 (RenderCompositeGlyphs8) Resource id: 0x1803105 X Error: RenderBadPicture (invalid Picture parameter) 171 Extension: 149 (RENDER) Minor opcode: 7 (RenderFreePicture) Resource id: 0x1803bdb Any ideas?
Taken the flush() fixes (with a modification to balance ->restore()). As for the BadMatch, can you run xtrace and extract the erroneous sequence? commit 6950b233e41a0c926465728c37f9bc5512f2844b Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Fri Jan 15 14:25:16 2010 +0000 qt: Make flush() robust. Hanno Meyer-Thurow reported in http://bugs.freedesktop.org/show_bug.cgi?id=26063 [PATCH] various fixes to cairo-qt a few issues related to _cairo_qt_surface_flush() where firefox was crashing after being built to use cairo-qt. This is an amalgam of those patches that hopefully address the issue.
xtrace does not show anything. Or I just prefer gdb. :) Still, I have not done X Error debugging before. And google just does not help me to identify the environment variable to get xlib (error reporting) synchronized. I will be back if I find some useful docs.
Okay, I got it synchronized and it seems to happen in _cairo_qt_surface_show_glyphs. The X Errors are inside the printf calls now, see below. But it does not always happen. The testcase I have is simpe, open google.com. There are transparent texts that fade in, perhaps? And I just saw that create_with_image does not create a xlib surface? But adding the creation there, too, does not help with the X Errors. Well, that is all I can help here, sorry. ___ cairo-qt: xlib start X Error: BadMatch (invalid parameter attributes) 8 Extension: 149 (RENDER) Minor opcode: 4 (RenderCreatePicture) Resource id: 0x104 X Error: RenderBadPicture (invalid Picture parameter) 171 Extension: 149 (RENDER) Minor opcode: 5 (RenderChangePicture) Resource id: 0x104 X Error: RenderBadPicture (invalid Picture parameter) 171 Extension: 149 (RENDER) Minor opcode: 23 (RenderCompositeGlyphs8) Resource id: 0x1a00168 cairo-qt: xlib stop
Well, since the initial bugreport is fixed this can be closed/fixed. Thank you! For the glyphs errors one may open another bugreport with better info or patch.
O well, before this bug is closed I want to add some info about the X Errors. They happen where opacity is set to zero. Any higher value and the X Errors disappear.
Okay, synchronized my cairo-qt version to cairo head. Now, the X Errors are gone. Closing as FIXED, thank you for your help!
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.