<div dir="ltr">Perhaps not.  It might not even be valuable for LLVM, as the wrapper is only useful for enabling this debug functionality (assertions), but I took the path of least resistance and made the semantics identical.<div>
<br></div><div>Still, assuming the wrapper is valuable for LLVM, then I think there's inherent value in having LLDB use LLVM's mutex rather than using std::mutex natively just for code reuse, and then enhancing LLVM's mutex wrapper to support LLDB's use cases.  LLDB aleady does things like logging its mutex accesses etc, so these are the perfect types of tasks for a wrapper class.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 5, 2014 at 5:32 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Since LLDB doesn't use the questionable "is multithreading enabled" functionality of LLVM's mutexes, I think it could probably get away with std::mutex, depending on the existing usage.<div>

<br></div><div>Do you the the wrapper is really valuable for LLDB?</div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On Thu, Jun 5, 2014 at 5:16 PM, Zachary Turner <span dir="ltr"><<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>></span> wrote:<br>

</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div>Just to be clear, std::mutex *is* the C++11 mutex, so what you're saying is the same as what I'm proposing.  It's just that in llvm they are wrapped inside of an additional class, to provide some very lightweight diagnostics code.</div>


</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 5, 2014 at 4:58 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br>
> On Jun 5, 2014, at 2:54 PM, Zachary Turner <<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>> wrote:<br>
><br>
> I have some patches up to LLVM currently to replace their base mutex implementations with std::mutex and std::recursive_mutex.  Assuming those go through, the next logical step would be to replace LLDB's mutex implementation with llvm::Mutex.<br>



<br>
</div>Why not just switch to the C++11 mutexes? We should get rid of the llvm::Mutex and the lldb_private::Mutex and rely on the C++11 versions.<br>
<div><br>
> I've had a look through the code, and the biggest feature that will be difficult to reproduce under this implementation is that of logging specific error messages from the pthread_mutex functions.  STL's implementation of course uses C++ exceptions, which both LLDB and LLVM disable at compile time.  In general, I don't expect that this will be very problematic, because errors to lock and unlock typically indicate an invalid use of the mutex, which shoudl be caught during development time, and errors to try_lock() are almost always "the mutex was already locked', in which case you only need a bool.<br>



><br>
> Before I go down this path, I want to find out if anyone has urgent need of this logging information in a way that is not upstreamable into LLVM, or if they can think of any other reasons I should not attempt this.<br>



><br>
> In general though, I think it would be a good idea to move more common stuff down to LLVM and make use of it there, whenever possible.<br>
<br>
</div>I would like to see both llvm and LLDBs mutex objects go away and we should switch over to C++11.<br>
<br>
LLVM and clang is not heavily multi-threaded and they have asserts (see llvm/lib/Support/Mutex.cpp) in the code that will cause LLDB to crash when run under Xcode or from the command line when/if anything goes wrong (we have similar asserts, but we enable them only for development) and we can't have the assertions firing off and crashing Xcode or command line LLDB.<br>



<br>
Also, switching to std::mutex and std::recursive_mutex just will make things slower (since they are based on the same underlying pthread calls) and it also introduce exceptions that get thrown when/if things go wrong?<br>



<br>
It we aren't switching to C++11, I would rather not change at all, and if we switch to C++11 we need to make sure no exceptions will get thrown or we can't switch.<br>
<span><font color="#888888"><br>
Greg<br>
<br>
</font></span></blockquote></div><br></div>
</div></div><br></div></div>_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">lldb-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>