<div dir="ltr">I've experimented a bit with Sysinternals Process Monitor.<div>The issue seems definetly linked to file size. I took dummy.h and ran it through the monitor. (bad trace)</div><div>Then I took dummy.h, removed 90% of the lines from the bottom, and also ran it through the monitor. (good trace)</div><div><br></div><div>At some point the traces diverge:</div><div>The good trace calls the operations ReadFile, CloseFile and is done.</div><div>The bad trace calls CreateFileMapping (which seems to fail with "FILE LOCKED WITH ONLY READERS"), QueryStandardInformationFile, CreateFileMapping, Close File.</div><div><br></div><div>So even though the bad trace does seem to close the filehandles, the file remains locked for write or delete.</div><div><br></div><div>I've also recorded the stack traces of libclang where the two diverge.</div><div>badcall.csv: <a href="https://drive.google.com/file/d/0B8xFlIzMhHcpZGRpTG9CcDRNSk0/view?usp=sharing">https://drive.google.com/file/d/0B8xFlIzMhHcpZGRpTG9CcDRNSk0/view?usp=sharing</a><br></div><div>goodcall.csv: <a href="https://drive.google.com/file/d/0B8xFlIzMhHcpaEt0UFEzRVJWUjg/view?usp=sharing">https://drive.google.com/file/d/0B8xFlIzMhHcpaEt0UFEzRVJWUjg/view?usp=sharing</a><br></div><div>You can throw these in your favourite diff tool.</div><div><br></div><div>Around some function called llvm MemoryBuffer getOpenFile things start to go different.</div><div>I have no experience yet with llvm code base to pinpoint this.</div><div><br></div><div>I can also upload the Process Monitor log trace files (*.PML) if someone needs them to analyze.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 8, 2014 at 8:32 PM, Kim Gräsman <span dir="ltr"><<a href="mailto:kim.grasman@gmail.com" target="_blank">kim.grasman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Dec 8, 2014 at 8:02 PM, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br>
> We use this code to open files for reading on Windows:<br>
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Path.inc?view=markup#l756" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Path.inc?view=markup#l756</a><br>
><br>
> See the FILE_SHARE_READ | FILE_SHARE_WRITE flags. We could add<br>
> FILE_SHARE_DELETE and see if that fixes your problem.<br>
><br>
> Note that locking files against writes or deletions while reading them is<br>
> pretty common on Windows. MSVC, for example, does this to sources and<br>
> headers during compilation.<br>
<br>
</span>Oh, and here's another one:<br>
<a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Path.inc?view=markup#l554" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Path.inc?view=markup#l554</a><br>
<br>
It seems to require exclusive access if Mode == readonly, which seems<br>
a little backwards.<br>
<br>
This probably isn't used in this code path, though.<br>
<span class="HOEnZb"><font color="#888888"><br>
- Kim<br>
</font></span></blockquote></div><br></div>