<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=iso-8859-1">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-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.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.Section1
        {page:Section1;}
-->
</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=SV link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span lang=EN-US>The mutex lock in &#8220;Sp.c&#8221; uses a
dangerous assumption that doesn&#8217;t hold on Win32. The mbox will be
assigned the opened win32 socket handle that could be greater than 0xFF, and
for most time is.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New";color:blue'>int</span><span
lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        <span
style='color:#020002'>SP_connect_timeout</span>( <span style='color:blue'>const</span>
<span style='color:blue'>char</span> *<span style='color:#020002'>spread_name</span>,
<span style='color:blue'>const</span> <span style='color:blue'>char</span> *<span
style='color:#020002'>private_name</span>,<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>                          <span
style='color:blue'>int</span> <span style='color:#020002'>priority</span>, <span
style='color:blue'>int</span> <span style='color:#020002'>group_membership</span>,
<span style='color:#020002'>mailbox</span> *<span style='color:#020002'>mbox</span>,<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>                          <span
style='color:blue'>char</span> *<span style='color:#020002'>private_group</span>,
<span style='color:#020002'>sp_time</span> <span style='color:#020002'>time_out</span>
)<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";
color:#020002'>s</span><span lang=EN-US style='font-size:10.0pt;font-family:
"Courier New"'> = <span style='color:#020002'>socket</span>( <span
style='color:#020002'>AF_UNIX</span>, <span style='color:#020002'>SOCK_STREAM</span>,
0 );<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>*<span
style='color:#020002'>mbox</span> = <span style='color:#020002'>s</span>;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>The following code is bad on win32, masking
with 0xFF will generate different socket handles using the same mutex and could
cause deadlock during multithreaded applications.<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New";color:#020002'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New";color:blue'>int</span><span
lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>        <span
style='color:#020002'>SP_scat_receive</span>( <span style='color:#020002'>mailbox</span>
<span style='color:#020002'>mbox</span>, <span style='color:#020002'>service</span>
*<span style='color:#020002'>service_type</span>, <span style='color:blue'>char</span>
<span style='color:#020002'>sender</span>[<span style='color:#020002'>MAX_GROUP_NAME</span>],<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>                                  <span
style='color:blue'>int</span> <span style='color:#020002'>max_groups</span>, <span
style='color:blue'>int</span> *<span style='color:#020002'>num_groups</span>, <span
style='color:blue'>char</span> <span style='color:#020002'>groups</span>[][<span
style='color:#020002'>MAX_GROUP_NAME</span>],<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>                                  <span
style='color:#020002'>int16</span> *<span style='color:#020002'>mess_type</span>,
<span style='color:blue'>int</span> *<span style='color:#020002'>endian_mismatch</span>,<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>                                  </span><span
style='font-size:10.0pt;font-family:"Courier New";color:#020002'>scatter</span><span
style='font-size:10.0pt;font-family:"Courier New"'> *<span style='color:#020002'>scat_mess</span>
)<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>{<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New";color:#020002'>.<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New";color:#020002'>.<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New";color:#020002'>Mutex_lock</span><span
lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>( &amp;<span
style='color:#020002'>Mbox_mutex</span>[<span style='color:#020002'>mbox</span>
&amp; <span style='color:#020002'>MAX_MUTEX_MASK</span>][1] );<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>.<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>.<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><b><span lang=EN-US
style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Mats Dal</span></b><span
lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman","serif"'><br>
</span><span lang=EN-US style='font-size:7.5pt;font-family:"Arial","sans-serif";
color:black'>Senior Software Engineer 1<br>
<br>
Tel 861<br>
Fax +46 8 658 78 99<br>
Cell 0709-549851<br>
</span><span style='font-size:7.5pt;font-family:"Arial","sans-serif";
color:black'><a href="mailto:Mats.Dal@dice.se"><span lang=EN-US
style='color:blue'>Mats.Dal@dice.se</span></a></span><span lang=EN-US
style='font-size:7.5pt;font-family:"Arial","sans-serif";color:black'><br>
<br>
</span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:black'>DICE</span></b><span lang=EN-US style='font-size:12.0pt;
font-family:"Times New Roman","serif"'><br>
</span><span lang=EN-US style='font-size:7.5pt;font-family:"Arial","sans-serif";
color:black'><br>
EA Digital Illusions CE AB<br>
Katarinavägen 15<br>
P.O. Box 20068<br>
SE-104 60 Stockholm, Sweden<br>
</span><span style='font-size:7.5pt;font-family:"Arial","sans-serif";
color:black'><a href="http://www.dice.se"><span lang=EN-US style='color:blue'>www.dice.se</span></a></span><span
lang=EN-US style='font-size:7.5pt;font-family:"Arial","sans-serif";color:black'><br>
<br>
<br>
Corporate Registration Number: 556710-6520 <br>
<br>
<o:p></o:p></span></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span
lang=EN-US style='font-size:7.5pt;font-family:"Verdana","sans-serif";
color:red'><br>
<br>
</span><span lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:black'><o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:7.5pt;font-family:"Arial","sans-serif";
color:black'>&nbsp;</span><span lang=EN-US style='font-size:12.0pt;font-family:
"Times New Roman","serif"'> </span><span lang=EN-US><o:p></o:p></span></p>

</div>

</body>

</html>