<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 27, 2015 at 1:13 AM, Yury Gribov <span dir="ltr"><<a href="mailto:tetra2005@gmail.com" target="_blank">tetra2005@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Updated based on review.<br>
<span class=""><br>
<br>
REPOSITORY<br>
rL LLVM<br>
<br>
<a href="http://reviews.llvm.org/D7171" target="_blank">http://reviews.llvm.org/D7171</a><br>
<br>
Files:<br>
lib/sanitizer_common/sanitizer_linux.cc<br>
lib/sanitizer_common/sanitizer_mac.cc<br>
lib/sanitizer_common/sanitizer_mutex.h<br>
<br>
Index: lib/sanitizer_common/sanitizer_linux.cc<br>
===================================================================<br>
--- lib/sanitizer_common/sanitizer_linux.cc<br>
+++ lib/sanitizer_common/sanitizer_linux.cc<br>
</span>@@ -493,15 +493,12 @@<br>
<span class=""> MtxSleeping = 2<br>
};<br>
<br>
-BlockingMutex::BlockingMutex(LinkerInitialized) {<br>
- CHECK_EQ(owner_, 0);<br>
-}<br>
-<br>
</span> BlockingMutex::BlockingMutex() {<br>
internal_memset(this, 0, sizeof(*this));<br>
<span class=""> }<br>
<br>
void BlockingMutex::Lock() {<br>
+ CHECK_EQ(owner_, 0);<br>
atomic_uint32_t *m = reinterpret_cast<atomic_uint32_t *>(&opaque_storage_);<br>
if (atomic_exchange(m, MtxLocked, memory_order_acquire) == MtxUnlocked)<br>
return;<br>
Index: lib/sanitizer_common/sanitizer_mac.cc<br>
===================================================================<br>
--- lib/sanitizer_common/sanitizer_mac.cc<br>
+++ lib/sanitizer_common/sanitizer_mac.cc<br>
</span>@@ -217,10 +217,6 @@<br>
<span class=""> return sysconf(_SC_PAGESIZE);<br>
}<br>
<br>
-BlockingMutex::BlockingMutex(LinkerInitialized) {<br>
- // We assume that OS_SPINLOCK_INIT is zero<br>
-}<br>
-<br>
</span> BlockingMutex::BlockingMutex() {<br>
internal_memset(this, 0, sizeof(*this));<br>
<span class=""> }<br>
Index: lib/sanitizer_common/sanitizer_mutex.h<br>
===================================================================<br>
--- lib/sanitizer_common/sanitizer_mutex.h<br>
+++ lib/sanitizer_common/sanitizer_mutex.h<br>
</span>@@ -73,7 +73,13 @@<br>
<span class=""><br>
class BlockingMutex {<br>
public:<br>
+#if SANITIZER_WINDOWS<br>
</span>+ // Windows does not currently support LinkerInitialized<br>
<span class=""> explicit BlockingMutex(LinkerInitialized);<br>
+#else<br>
+ explicit constexpr BlockingMutex(LinkerInitialized)<br>
</span>+ : opaque_storage_ {0, }, </blockquote><div><br>This is something I haven't seen before (though seems obvious enough) - any idea if it's supported on the full compiler support matrix (except windows?)?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">owner_(0) {}</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="">+#endif<br>
BlockingMutex();<br>
void Lock();<br>
void Unlock();<br>
<br>
</span>EMAIL PREFERENCES<br>
<a href="http://reviews.llvm.org/settings/panel/emailpreferences/" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</blockquote></div><br></div></div>