<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:"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;}
 /* 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.E-postmall17
        {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-GB>This bug manifests as follows:<o:p></o:p></span></p>

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

<p class=MsoNormal><span lang=EN-GB>Suppose FileName is the name of an existing
file to which we have access.<o:p></o:p></span></p>

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

<p class=MsoNormal><span lang=EN-GB>                             file:delete(FileName)                                           returns
ok<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-GB>                             file:write_file(FileName,Bin)                             returns
{error,eacces}<o:p></o:p></span></p>

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

<p class=MsoNormal><span lang=EN-GB>This ought not to happen, because we do
have access to the file. The documentation says eacces means “Missing
permission for writing the file or searching one of the parent directories”,
but neither of these is the case—and indeed, if we repeat the same test,
then it will almost always succeed as it should.<o:p></o:p></span></p>

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

<p class=MsoNormal><span lang=EN-GB>Unfortunately, this bug is rare and very
hard to reproduce, so I can’t include instructions for doing so. I found
the problem by running random sequences of file:write_file and file:delete
commands, operating on a small set of filenames. I tried to get repeatable
tests by running each test in a newly created directory, on a newly spawned
Erlang node, and after a timer:sleep—but even so, I found that a sequence
which failed once could very well go on to succeed the next 100 times I tried
it.  However, I have been able to collect about 40 examples of the bug
using QuickCheck. All of them take the form above; they range in length from 4
commands to over 2,000. There are sometimes operations on other files between
the delete and the write_file that fails, but never further operations on
FileName itself.<o:p></o:p></span></p>

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

<p class=MsoNormal><span lang=EN-GB>I’ve observed this behaviour under
R11B and R12B, under both Windows XP and Vista. It doesn’t appear to
happen at all under Linux.<o:p></o:p></span></p>

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

<p class=MsoNormal><span lang=EN-GB>John Hughes<o:p></o:p></span></p>

</div>

</body>

</html>