<div dir="ltr">It looks like target delete has a --clean option which does what I need.  So I think that means the answer to my question of whether or not it's important is yes, and so I'll probably just want to change the default value from false to true on Windows.  Is there any precedent for having command options take different default values on different platforms?<br></div><br><div class="gmail_quote">On Tue, Mar 24, 2015 at 3:53 PM Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I've tracked down the source of a bunch of test failures on Windows which are caused by file handle leaks.  The symptom of the problem is that if you run "file a.out" the file is locked after that, and you cannot delete it.  This causes a bunch of tests to fail when "make clean" can't delete the file.  <div><br></div><div>Thas to do with the nature of the Windows kernel and how it treats memory mapped files.  Essentially what is happening is that ModuleList::GetSharedModule() is mmapping the file and intentionally leaking the handle.  So even doing target delete won't free the handle.<div><br></div><div>I'm guessing this is an optimization, but how necessary is it?  Assuming it needs to stay, would it be reasonable for me to disable this intentional leak for Windows behind a preprocessor definition, make target delete remove the module from the shared module list, and update the test suite to always free created targets on teardown?</div></div></div></blockquote></div>