[cairo-bugs] [Bug 39373] New: cairo-xlib hangs with render 0.0

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Tue Jul 19 07:02:37 PDT 2011


https://bugs.freedesktop.org/show_bug.cgi?id=39373

           Summary: cairo-xlib hangs with render 0.0
           Product: cairo
           Version: 1.10.3
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: xlib backend
        AssignedTo: cworth at cworth.org
        ReportedBy: psychon at znc.in
         QAContact: cairo-bugs at cairographics.org


Hi,

For some weird reason I experimented with the CAIRO_DEBUG env var and noticed
that "CAIRO_DEBUG=xrender-version=0.0 gvim" hangs.

Cairo is trying to lock _cairo_pattern_solid_surface_cache_lock in
_cairo_pattern_acquire_surface_for_solid, but this non-recursive mutex is
already locked by the current thread in an earlier call to
_cairo_pattern_acquire_surface_for_solid (See frames 3 and 16).

This only happens with CAIRO_DEBUG=xrender-version=0.0 because of the following
code in cairo-xlib-surface.c, line 2800 (RENDER 0.1 introduced
XRenderFillRectangle()):

    if (!CAIRO_SURFACE_RENDER_HAS_FILL_RECTANGLES (surface)) {
    if (op == CAIRO_OPERATOR_CLEAR ||
        ((op == CAIRO_OPERATOR_SOURCE || op == CAIRO_OPERATOR_OVER) &&
         CAIRO_COLOR_IS_OPAQUE (color)))
    {
        return _cairo_xlib_surface_solid_fill_rectangles (surface, color,
                                  rects, num_rects);
    }

    return UNSUPPORTED ("no support for FillRectangles with this op");
    }


Backtrace for the relevant thread:

Thread 1 (Thread 0x7f33729bf960 (LWP 32730)):
#0  __lll_lock_wait () at
../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:136
#1  0x00007f336f8d0329 in _L_lock_926 () from
/lib/x86_64-linux-gnu/libpthread.so.0
#2  0x00007f336f8d014b in __pthread_mutex_lock (mutex=0x7f336e029360) at
pthread_mutex_lock.c:61
#3  0x00007f336dd9399c in _cairo_pattern_acquire_surface_for_solid
(pattern=0x7fff2f6b21c0, dst=0x269db20, x=0, y=0, width=4, height=4, flags=0, 
    surface_out=0x7fff2f6b2a20, attributes=0x7fff2f6b29c0) at
cairo-pattern.c:2403
#4  _cairo_pattern_acquire_surface (pattern=0x7fff2f6b21c0, dst=0x269db20, x=0,
y=0, width=4, height=4, flags=0, surface_out=0x7fff2f6b2a20, 
    attributes=0x7fff2f6b29c0) at cairo-pattern.c:4063
#5  0x00007f336ddcd66a in _cairo_xlib_surface_solid_fill_rectangles
(abstract_surface=0x269db20, op=<value optimized out>, color=0x7fff2f6b3cd0, 
    rects=0x7fff2f6b2a90, num_rects=1) at cairo-xlib-surface.c:2748
#6  _cairo_xlib_surface_fill_rectangles (abstract_surface=0x269db20, op=<value
optimized out>, color=0x7fff2f6b3cd0, rects=0x7fff2f6b2a90, num_rects=1)
    at cairo-xlib-surface.c:2805
#7  0x00007f336dda491d in _cairo_surface_fill_rectangles (surface=0x269db20,
op=CAIRO_OPERATOR_SOURCE, color=0x7fff2f6b3cd0, region=<value optimized out>)
    at cairo-surface.c:1963
#8  _cairo_surface_fill_rectangles (surface=0x269db20,
op=CAIRO_OPERATOR_SOURCE, color=0x7fff2f6b3cd0, region=<value optimized out>)
at cairo-surface.c:1880
#9  _cairo_surface_fill_region (surface=0x269db20, op=CAIRO_OPERATOR_SOURCE,
color=0x7fff2f6b3cd0, region=<value optimized out>) at cairo-surface.c:1920
#10 0x00007f336ddaa8c0 in _clip_and_composite_region (src=0x7fff2f6b3c50,
op=CAIRO_OPERATOR_SOURCE, dst=0x269db20, traps=0x7fff2f6b3480, 
    antialias=CAIRO_ANTIALIAS_DEFAULT, clip=0x0, extents=0x7fff2f6b3ba0) at
cairo-surface-fallback.c:618
#11 _clip_and_composite_trapezoids (src=0x7fff2f6b3c50,
op=CAIRO_OPERATOR_SOURCE, dst=0x269db20, traps=0x7fff2f6b3480,
antialias=CAIRO_ANTIALIAS_DEFAULT, clip=0x0, 
    extents=0x7fff2f6b3ba0) at cairo-surface-fallback.c:847
#12 0x00007f336ddaaab6 in _cairo_surface_fallback_paint (surface=0x269db20,
op=CAIRO_OPERATOR_SOURCE, source=0x7fff2f6b3c50, clip=0x0)
    at cairo-surface-fallback.c:936
#13 0x00007f336dda6f79 in _cairo_surface_paint (surface=0x269db20,
op=CAIRO_OPERATOR_SOURCE, source=0x7fff2f6b3c50, clip=0x0) at
cairo-surface.c:2032
#14 _cairo_surface_paint (surface=0x269db20, op=CAIRO_OPERATOR_SOURCE,
source=0x7fff2f6b3c50, clip=0x0) at cairo-surface.c:1998
#15 0x00007f336dda8bdb in _cairo_surface_create_similar_solid (other=<value
optimized out>, content=CAIRO_CONTENT_COLOR, width=1, height=1,
color=0x7fff2f6b4070, 
    allow_fallback=0) at cairo-surface.c:538
#16 0x00007f336dd93f4e in _cairo_pattern_acquire_surface_for_solid
(pattern=<value optimized out>, dst=0x269d1c0, x=0, y=0, width=<value optimized
out>, 
    height=<value optimized out>, flags=0, surface_out=0x7fff2f6b4850,
attributes=0x7fff2f6b47f0) at cairo-pattern.c:2449
#17 _cairo_pattern_acquire_surface (pattern=<value optimized out>,
dst=0x269d1c0, x=0, y=0, width=<value optimized out>, height=<value optimized
out>, flags=0, 
    surface_out=0x7fff2f6b4850, attributes=0x7fff2f6b47f0) at
cairo-pattern.c:4063
#18 0x00007f336ddcd66a in _cairo_xlib_surface_solid_fill_rectangles
(abstract_surface=0x269d1c0, op=<value optimized out>, color=0x7fff2f6b5b40, 
    rects=0x7fff2f6b4900, num_rects=1) at cairo-xlib-surface.c:2748
#19 _cairo_xlib_surface_fill_rectangles (abstract_surface=0x269d1c0, op=<value
optimized out>, color=0x7fff2f6b5b40, rects=0x7fff2f6b4900, num_rects=1)
    at cairo-xlib-surface.c:2805
#20 0x00007f336dda6d72 in _cairo_surface_fill_rectangles (surface=0x269d1c0,
op=CAIRO_OPERATOR_OVER, color=0x7fff2f6b5b40, rects=0x7fff2f6b4900,
num_rects=1)
    at cairo-surface.c:1963
#21 _cairo_surface_fill_rectangles (surface=0x269d1c0, op=CAIRO_OPERATOR_OVER,
color=0x7fff2f6b5b40, rects=0x7fff2f6b4900, num_rects=1) at
cairo-surface.c:1946
#22 0x00007f336dda9aed in _fill_rectangles (dst=0x269d1c0,
op=CAIRO_OPERATOR_OVER, src=<value optimized out>, traps=<value optimized out>, 
    clip=<value optimized out>) at cairo-surface-fallback.c:725
#23 0x00007f336ddaa387 in _clip_and_composite_trapezoids (src=0x7fff2f6b5ac0,
op=CAIRO_OPERATOR_OVER, dst=0x269d1c0, traps=0x7fff2f6b52e0, 
    antialias=CAIRO_ANTIALIAS_DEFAULT, clip=0x0, extents=0x7fff2f6b5a00) at
cairo-surface-fallback.c:809
#24 0x00007f336ddaaab6 in _cairo_surface_fallback_paint (surface=0x269d1c0,
op=CAIRO_OPERATOR_OVER, source=0x7fff2f6b5ac0, clip=0x0) at
cairo-surface-fallback.c:936
#25 0x00007f336dda6f79 in _cairo_surface_paint (surface=0x269d1c0,
op=CAIRO_OPERATOR_OVER, source=0x7fff2f6b5ac0, clip=0x0) at
cairo-surface.c:2032
#26 _cairo_surface_paint (surface=0x269d1c0, op=CAIRO_OPERATOR_OVER,
source=0x7fff2f6b5ac0, clip=0x0) at cairo-surface.c:1998
#27 0x00007f336dd72f9c in _cairo_gstate_fill (gstate=0x269d440, path=0x269d788)
at cairo-gstate.c:1300
---Type <return> to continue, or q <return> to quit--- 
#28 0x00007f336dd74f7d in _cairo_gstate_fill (gstate=0x269d440, path=0x269d788)
at cairo-gstate.c:1267
#29 0x00007f336dd6e858 in _cairo_default_context_fill (abstract_cr=0x269d410)
at cairo-default-context.c:999
#30 0x00007f336dd6835a in cairo_fill (cr=0x269d410) at cairo.c:2099
#31 0x00007f3371f08922 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#32 0x00007f3371f0b004 in gdk_window_begin_paint_region () from
/usr/lib/libgdk-x11-2.0.so.0
#33 0x00007f33722bf55f in gtk_main_do_event () from
/usr/lib/libgtk-x11-2.0.so.0
#34 0x00007f3371f0fcf2 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#35 0x00007f3371f0fc9f in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#36 0x00007f3371f0ac2b in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#37 0x00007f3371f0ce39 in gdk_window_process_all_updates () from
/usr/lib/libgdk-x11-2.0.so.0
#38 0x00007f3371f0cea9 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#39 0x00007f3371eea126 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#40 0x00007f33712de4a3 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#41 0x00007f33712dec80 in ?? () from /lib/libglib-2.0.so.0
#42 0x00007f33712def1d in g_main_context_iteration () from
/lib/libglib-2.0.so.0
#43 0x00000000005a0935 in gui_mch_update ()
#44 0x00000000005955bc in gui_init ()
#45 0x000000000057c9e8 in set_termname ()
#46 0x0000000000596867 in gui_start ()
#47 0x000000000043bf95 in main ()

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the cairo-bugs mailing list