<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jun 2, 2014 at 10:28 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On Mon, Jun 2, 2014 at 10:00 AM, Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br>

> I accidentally a word.   I meant to say the goal would be to enforce<br>
> once-only *initialization* inside of ManagedStatic.<br>
><br>
><br>
> On Mon, Jun 2, 2014 at 9:59 AM, Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br>
>><br>
>> The mutex could be made an actual global static instead of a<br>
>> ManagedStatic.  This guarantees it would be constructed before main, and<br>
>> live until the end of main.<br>
<br>
</div>Except being live before main is insufficient. Passes are registered<br>
from other global initializers. There's no ordering guarantee between<br>
global initializers, so it's possible that pass registrations may<br>
occur before the global mutex is initialized... (at least I think<br>
that's an issue?)<br></blockquote><div><br></div><div>Shouldn't be an issue.  Static initialization is single threaded, and StaticPassRegistry is immutable once you enter main, so StaticPassRegistry won't even need the mutex.  That's the thing that this solves.  It separates out the code that needs the mutex from the code that doesn't.  </div>
<div><br></div><div>Pass registrations occur before the mutex is initialized, but they go into StaticPassRegistry.  As soon as you enter main, you go through the StaticPassRegistry and add each item to the PassRegistry.  The mutex is guaranteed to be initialized at this time.</div>
</div></div></div>