<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=WordSection1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi Mikhail,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I too ran into the same issue using the VisualWorks Smalltalk vm
on win32. I hadn&#8217;t yet found your post so I built pixman with the PIXMAN_NO_TLS
preprocessor to get past my failure. That also worked. However, I would like to
have TLS support. Is there any chance you can share the modifications you made
to the MINGW macros? Perhaps with your changes, the pixman folks can make this
a permanent addition to pixman-compiler.h for the win32 people using pixman?<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Thanks,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>-Chris &nbsp;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
cairo-bounces+chris.thorgrimsson=lamrc.com@cairographics.org
[mailto:cairo-bounces+chris.thorgrimsson=lamrc.com@cairographics.org] <b>On
Behalf Of </b>Kozhevnikov Mikhail<br>
<b>Sent:</b> Wednesday, September 01, 2010 6:28 PM<br>
<b>To:</b> cairo@cairographics.org<br>
<b>Subject:</b> Re: [cairo] pixman TLS crash on win32 under java-vm<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<div>

<p class=MsoNormal>Hi,<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>Apparently the reason is that, according to <a
href="http://msdn.microsoft.com/en-us/library/2s9wt68x.aspx">MSDN</a>,<em> On
Windows operating systems before Windows Vista, __declspec( thread ) has some
limitations. If a DLL declares any data or object as __declspec( thread ), it
can cause a protection fault if dynamically loaded. After the DLL is loaded
with LoadLibrary, it causes system failure whenever the code references the
__declspec( thread ) data. Because the global variable space for a thread is
allocated at run time, the size of this space is based on a calculation of the
requirements of the application plus the requirements of all the DLLs that are
statically linked. When you use LoadLibrary, you cannot extend this space to
allow for the thread local variables declared with __declspec( thread ). Use
the TLS APIs, such as TlsAlloc, in your DLL to allocate TLS if the DLL might be
loaded with LoadLibrary.</em><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>Thus the problem isn't confined to our application. A
reasonable solution would be to use the TlsAlloc et al. In fact, the MINGW
version of pixman TLS macros seems to do the trick with little modifications.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>Cheers,<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>Mikhail.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>01.09.2010, 20:52, &quot;Kozhevnikov Mikhail&quot; :<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; Hi,<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; I've got a rather strange setup here, which causes
pixman to crash. It seems to happen in line 657 of pixman.c that reads<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; cache = PIXMAN_GET_THREAD_LOCAL (fast_path_cache);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; which disassembles into<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; 102F8922 mov edx,dword ptr [__tls_index (1064AEDCh)]<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; 102F8928 mov eax,dword ptr fs:[0000002Ch]<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; 102F892E mov ecx,dword ptr [eax+edx*4]<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; 102F8931 add ecx,108h<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; 102F8937 mov dword ptr [cache],ecx<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; where the third instruction is the one to cause the
crash.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; The call sequence is as follows:<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; do_composite<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; pixman_image_composite32<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; pixman_image_composite<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_image_surface_composite<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_surface_composite<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_win32_scaled_font_show_glyphs<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_scaled_font_show_glyphs<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_surface_old_show_glyphs_draw_func<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _clip_and_composite<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_surface_fallback_show_glyphs<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_surface_show_text_glyphs<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; _cairo_gstate_show_text_glyphs<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; cairo_show_text<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; The 32-bit binaries are built from the latest
cairo/pixman release sources with VS 9.0 under Win Server 2008 x64 and are
linked into a dll that's loaded by the Java VM on a Win XP x86 machine. An
interesting point is that we've failed to reproduce this error on 32-bit Vista
or on the same machine, but calldoing the same stuff from a C++ application
without using Java.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; I suspect that this has something to do with the TLS
machinery in use. Has anyone ran across this?<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; Is there a way to prevent pixman from using TLS?<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt;<o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; Cheers,<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; Mikhail.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; --<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; cairo mailing list<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; cairo@cairographics.org<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&gt; http://lists.cairographics.org/mailman/listinfo/cairo<o:p></o:p></p>

</div>

</div>

</body>

</html>