<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Thanks so much Chris for confirming.<br>With that knowledge I managed to reproduce and eliminate the bug.<br>There was a thread trying to read this surface stuff when it *really* shouldn't :)<br><br>I'm having great fun with cairo doing animations and stuff. Hopefully I'll be able to post a video of my app at some point :)<br><br>Best Regards<br>Julien<br><br>&gt; Date: Sat, 5 Dec 2009 08:50:18 +0000<br>&gt; To: julien_bramary@msn.com; cairo@cairographics.org<br>&gt; Subject: Re: [cairo] Can an expert look at this stack trace?<br>&gt; From: chris@chris-wilson.co.uk<br>&gt; <br>&gt; On Sat, 5 Dec 2009 06:06:51 +0100, Julien Bramary &lt;julien_bramary@msn.com&gt; wrote:<br>&gt; &gt; <br>&gt; &gt; Hello all, this is my first post to this list.<br>&gt; <br>&gt; Welcome, we hope you are having fun using Cairo, and this does not mar the<br>&gt; experience!<br>&gt; <br>&gt; &gt; I am writing a threaded cairo application and I need help understanding a rare-ish bug.<br>&gt; &gt; I'm still using cairo 1.8.8 but considering an upgrade to get the nice profiling tools.<br>&gt; &gt; <br>&gt; &gt; Every so often I get the following crash:<br>&gt; &gt; cairo-board: cairo-surface.c:406: cairo_surface_reference: Assertion `((*&amp;(&amp;surface-&gt;ref_count)-&gt;ref_count) &gt; 0)' failed.<br>&gt; &gt; /usr/lib/libcairo.so.2(cairo_pattern_create_for_surface+0x7d) [0x7f2e24966a6d]<br>&gt; &gt; /usr/lib/libcairo.so.2(cairo_set_source_surface+0x46) [0x7f2e249525b6]<br>&gt; &gt; ./cairo-board [0x40f591]<br>&gt; &gt; <br>&gt; &gt; If understand correctly my application is calling set_source_surface on an invalid surface?<br>&gt; &gt; Does it mean the surface was destroyed? This is very possible as the code is quite convoluted.<br>&gt; <br>&gt; Yes, this means that cairo_surface_reference() has been called on a<br>&gt; surface that has already been freed. In this particular case you are<br>&gt; trying to use a source surface that has already been destroyed.<br>&gt; <br>&gt; &gt; The rarity of the crash (less than 1/100) makes me think it might be a timing issue with a thread destroying the surface while another one tries to read it with cairo_set_source_surface but I can't see where as everything should be locked...<br>&gt; &gt; I'd like to know if an expert can confirm.<br>&gt; <br>&gt; Ah the spectre of threads. If you even suspect you have a race here, you<br>&gt; do. The thread using the surface as a source must own a reference to the<br>&gt; surface, so there should be no doubt as to the validity of that surface<br>&gt; and hence no race. So either you've violated that principle or you have<br>&gt; a double-free somewhere in your code.<br>&gt; -ickle<br>&gt; <br>&gt; -- <br>&gt; Chris Wilson, Intel Open Source Technology Centre<br>                                               <br /><hr />Windows Live: Make it easier for your friends to see  <a href='http://www.microsoft.com/middleeast/windows/windowslive/see-it-in-action/social-network-basics.aspx?ocid=PID23461::T:WLMTAGL:ON:WL:en-xm:SI_SB_2:092009' target='_new'>what you’re up to on Facebook.</a></body>
</html>