remove use of Mutex in favour of std::{,recursive_}mutex

This is a pretty straightforward first pass over removing a number of uses of
Mutex in favor of std::mutex or std::recursive_mutex. The problem is that there
are interfaces which take Mutex::Locker & to lock internal locks. This patch
cleans up most of the easy cases. The only non-trivial change is in
CommandObjectTarget.cpp where a Mutex::Locker was split into two.

llvm-svn: 269877
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp
index 688626e..3899846 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp
@@ -96,12 +96,12 @@
 }                                                                                                               \n\
 ";
 
-AppleGetItemInfoHandler::AppleGetItemInfoHandler (Process *process) :
-    m_process (process),
-    m_get_item_info_impl_code (),
-    m_get_item_info_function_mutex(),
-    m_get_item_info_return_buffer_addr (LLDB_INVALID_ADDRESS),
-    m_get_item_info_retbuffer_mutex()
+AppleGetItemInfoHandler::AppleGetItemInfoHandler(Process *process)
+    : m_process(process),
+      m_get_item_info_impl_code(),
+      m_get_item_info_function_mutex(),
+      m_get_item_info_return_buffer_addr(LLDB_INVALID_ADDRESS),
+      m_get_item_info_retbuffer_mutex()
 {
 }
 
@@ -110,14 +110,14 @@
 }
 
 void
-AppleGetItemInfoHandler::Detach ()
+AppleGetItemInfoHandler::Detach()
 {
 
     if (m_process && m_process->IsAlive() && m_get_item_info_return_buffer_addr != LLDB_INVALID_ADDRESS)
     {
-        Mutex::Locker locker;
-        locker.TryLock (m_get_item_info_retbuffer_mutex);  // Even if we don't get the lock, deallocate the buffer
-        m_process->DeallocateMemory (m_get_item_info_return_buffer_addr);
+        std::unique_lock<std::mutex> lock(m_get_item_info_retbuffer_mutex, std::defer_lock);
+        lock.try_lock(); // Even if we don't get the lock, deallocate the buffer
+        m_process->DeallocateMemory(m_get_item_info_return_buffer_addr);
     }
 }
 
@@ -143,8 +143,8 @@
 
     // Scope for mutex locker:
     {
-        Mutex::Locker locker(m_get_item_info_function_mutex);
-        
+        std::lock_guard<std::mutex> guard(m_get_item_info_function_mutex);
+
         // First stage is to make the UtilityFunction to hold our injected function:
 
         if (!m_get_item_info_impl_code.get())
@@ -296,8 +296,7 @@
     page_to_free_size_value.SetValueType (Value::eValueTypeScalar);
     page_to_free_size_value.SetCompilerType (clang_uint64_type);
 
-
-    Mutex::Locker locker(m_get_item_info_retbuffer_mutex);
+    std::lock_guard<std::mutex> guard(m_get_item_info_retbuffer_mutex);
     if (m_get_item_info_return_buffer_addr == LLDB_INVALID_ADDRESS)
     {
         addr_t bufaddr = process_sp->AllocateMemory (32, ePermissionsReadable | ePermissionsWritable, error);
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.h b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.h
index 51182a6..dc341d6 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.h
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.h
@@ -13,13 +13,14 @@
 // C Includes
 // C++ Includes
 #include <map>
+#include <mutex>
 #include <vector>
+
 // Other libraries and framework includes
 // Project includes
 #include "lldb/lldb-public.h"
 #include "lldb/Core/Error.h"
 #include "lldb/Expression/UtilityFunction.h"
-#include "lldb/Host/Mutex.h"
 #include "lldb/Symbol/CompilerType.h"
 
 // This class will insert a UtilityFunction into the inferior process for
@@ -105,11 +106,10 @@
 
     lldb_private::Process *m_process;
     std::unique_ptr<UtilityFunction> m_get_item_info_impl_code;
-    Mutex m_get_item_info_function_mutex;
+    std::mutex m_get_item_info_function_mutex;
 
     lldb::addr_t m_get_item_info_return_buffer_addr;
-    Mutex m_get_item_info_retbuffer_mutex;
-
+    std::mutex m_get_item_info_retbuffer_mutex;
 };
 
 }  // using namespace lldb_private
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp
index c262ffc..d311f5f 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp
@@ -100,12 +100,12 @@
 }                                                                                                               \n\
 ";
 
-AppleGetPendingItemsHandler::AppleGetPendingItemsHandler (Process *process) :
-    m_process (process),
-    m_get_pending_items_impl_code (),
-    m_get_pending_items_function_mutex(),
-    m_get_pending_items_return_buffer_addr (LLDB_INVALID_ADDRESS),
-    m_get_pending_items_retbuffer_mutex()
+AppleGetPendingItemsHandler::AppleGetPendingItemsHandler(Process *process)
+    : m_process(process),
+      m_get_pending_items_impl_code(),
+      m_get_pending_items_function_mutex(),
+      m_get_pending_items_return_buffer_addr(LLDB_INVALID_ADDRESS),
+      m_get_pending_items_retbuffer_mutex()
 {
 }
 
@@ -114,14 +114,13 @@
 }
 
 void
-AppleGetPendingItemsHandler::Detach ()
+AppleGetPendingItemsHandler::Detach()
 {
-
     if (m_process && m_process->IsAlive() && m_get_pending_items_return_buffer_addr != LLDB_INVALID_ADDRESS)
     {
-        Mutex::Locker locker;
-        locker.TryLock (m_get_pending_items_retbuffer_mutex);  // Even if we don't get the lock, deallocate the buffer
-        m_process->DeallocateMemory (m_get_pending_items_return_buffer_addr);
+        std::unique_lock<std::mutex> lock(m_get_pending_items_retbuffer_mutex, std::defer_lock);
+        lock.try_lock(); // Even if we don't get the lock, deallocate the buffer
+        m_process->DeallocateMemory(m_get_pending_items_return_buffer_addr);
     }
 }
 
@@ -149,8 +148,8 @@
 
     // Scope for mutex locker:
     {
-        Mutex::Locker locker(m_get_pending_items_function_mutex);
-        
+        std::lock_guard<std::mutex> guard(m_get_pending_items_function_mutex);
+
         // First stage is to make the ClangUtility to hold our injected function:
 
         if (!m_get_pending_items_impl_code.get())
@@ -298,8 +297,7 @@
     page_to_free_size_value.SetValueType (Value::eValueTypeScalar);
     page_to_free_size_value.SetCompilerType (clang_uint64_type);
 
-
-    Mutex::Locker locker(m_get_pending_items_retbuffer_mutex);
+    std::lock_guard<std::mutex> guard(m_get_pending_items_retbuffer_mutex);
     if (m_get_pending_items_return_buffer_addr == LLDB_INVALID_ADDRESS)
     {
         addr_t bufaddr = process_sp->AllocateMemory (32, ePermissionsReadable | ePermissionsWritable, error);
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.h b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.h
index 445c4a0..96fbf4a5 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.h
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.h
@@ -13,12 +13,13 @@
 // C Includes
 // C++ Includes
 #include <map>
+#include <mutex>
 #include <vector>
+
 // Other libraries and framework includes
 // Project includes
 #include "lldb/lldb-public.h"
 #include "lldb/Core/Error.h"
-#include "lldb/Host/Mutex.h"
 #include "lldb/Symbol/CompilerType.h"
 
 // This class will insert a UtilityFunction into the inferior process for
@@ -107,11 +108,10 @@
 
     lldb_private::Process *m_process;
     std::unique_ptr<UtilityFunction> m_get_pending_items_impl_code;
-    Mutex m_get_pending_items_function_mutex;
+    std::mutex m_get_pending_items_function_mutex;
 
     lldb::addr_t m_get_pending_items_return_buffer_addr;
-    Mutex m_get_pending_items_retbuffer_mutex;
-
+    std::mutex m_get_pending_items_retbuffer_mutex;
 };
 
 }  // using namespace lldb_private
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp
index e1f0451..e90fe6d 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp
@@ -96,12 +96,12 @@
 }                                                                                                               \n\
 ";
 
-AppleGetQueuesHandler::AppleGetQueuesHandler (Process *process) :
-    m_process (process),
-    m_get_queues_impl_code_up (),
-    m_get_queues_function_mutex(),
-    m_get_queues_return_buffer_addr (LLDB_INVALID_ADDRESS),
-    m_get_queues_retbuffer_mutex()
+AppleGetQueuesHandler::AppleGetQueuesHandler(Process *process)
+    : m_process(process),
+      m_get_queues_impl_code_up(),
+      m_get_queues_function_mutex(),
+      m_get_queues_return_buffer_addr(LLDB_INVALID_ADDRESS),
+      m_get_queues_retbuffer_mutex()
 {
 }
 
@@ -110,14 +110,14 @@
 }
 
 void
-AppleGetQueuesHandler::Detach ()
+AppleGetQueuesHandler::Detach()
 {
 
     if (m_process && m_process->IsAlive() && m_get_queues_return_buffer_addr != LLDB_INVALID_ADDRESS)
     {
-        Mutex::Locker locker;
-        locker.TryLock (m_get_queues_retbuffer_mutex);  // Even if we don't get the lock, deallocate the buffer
-        m_process->DeallocateMemory (m_get_queues_return_buffer_addr);
+        std::unique_lock<std::mutex> lock(m_get_queues_retbuffer_mutex, std::defer_lock);
+        lock.try_lock(); // Even if we don't get the lock, deallocate the buffer
+        m_process->DeallocateMemory(m_get_queues_return_buffer_addr);
     }
 }
 
@@ -159,8 +159,8 @@
 
     // Scope for mutex locker:
     {
-        Mutex::Locker locker(m_get_queues_function_mutex);
-        
+        std::lock_guard<std::mutex> guard(m_get_queues_function_mutex);
+
         // First stage is to make the ClangUtility to hold our injected function:
 
         if (!m_get_queues_impl_code_up.get())
@@ -297,8 +297,7 @@
     page_to_free_size_value.SetValueType (Value::eValueTypeScalar);
     page_to_free_size_value.SetCompilerType (clang_uint64_type);
 
-
-    Mutex::Locker locker(m_get_queues_retbuffer_mutex);
+    std::lock_guard<std::mutex> guard(m_get_queues_retbuffer_mutex);
     if (m_get_queues_return_buffer_addr == LLDB_INVALID_ADDRESS)
     {
         addr_t bufaddr = process_sp->AllocateMemory (32, ePermissionsReadable | ePermissionsWritable, error);
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.h b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.h
index 6f3df5f..b7ca26d 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.h
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.h
@@ -13,12 +13,13 @@
 // C Includes
 // C++ Includes
 #include <map>
+#include <mutex>
 #include <vector>
+
 // Other libraries and framework includes
 // Project includes
 #include "lldb/lldb-public.h"
 #include "lldb/Core/Error.h"
-#include "lldb/Host/Mutex.h"
 #include "lldb/Symbol/CompilerType.h"
 
 // This class will insert a UtilityFunction into the inferior process for
@@ -104,11 +105,10 @@
 
     lldb_private::Process *m_process;
     std::unique_ptr<UtilityFunction> m_get_queues_impl_code_up;
-    Mutex m_get_queues_function_mutex;
+    std::mutex m_get_queues_function_mutex;
 
     lldb::addr_t m_get_queues_return_buffer_addr;
-    Mutex m_get_queues_retbuffer_mutex;
-
+    std::mutex m_get_queues_retbuffer_mutex;
 };
 
 }  // using namespace lldb_private
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp
index 266e461..85ad012 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp
@@ -103,12 +103,12 @@
 }                                                                                                               \n\
 ";
 
-AppleGetThreadItemInfoHandler::AppleGetThreadItemInfoHandler (Process *process) :
-    m_process (process),
-    m_get_thread_item_info_impl_code (),
-    m_get_thread_item_info_function_mutex(),
-    m_get_thread_item_info_return_buffer_addr (LLDB_INVALID_ADDRESS),
-    m_get_thread_item_info_retbuffer_mutex()
+AppleGetThreadItemInfoHandler::AppleGetThreadItemInfoHandler(Process *process)
+    : m_process(process),
+      m_get_thread_item_info_impl_code(),
+      m_get_thread_item_info_function_mutex(),
+      m_get_thread_item_info_return_buffer_addr(LLDB_INVALID_ADDRESS),
+      m_get_thread_item_info_retbuffer_mutex()
 {
 }
 
@@ -117,14 +117,14 @@
 }
 
 void
-AppleGetThreadItemInfoHandler::Detach ()
+AppleGetThreadItemInfoHandler::Detach()
 {
 
     if (m_process && m_process->IsAlive() && m_get_thread_item_info_return_buffer_addr != LLDB_INVALID_ADDRESS)
     {
-        Mutex::Locker locker;
-        locker.TryLock (m_get_thread_item_info_retbuffer_mutex);  // Even if we don't get the lock, deallocate the buffer
-        m_process->DeallocateMemory (m_get_thread_item_info_return_buffer_addr);
+        std::unique_lock<std::mutex> lock(m_get_thread_item_info_retbuffer_mutex, std::defer_lock);
+        lock.try_lock(); // Even if we don't get the lock, deallocate the buffer
+        m_process->DeallocateMemory(m_get_thread_item_info_return_buffer_addr);
     }
 }
 
@@ -152,8 +152,8 @@
 
     // Scope for mutex locker:
     {
-        Mutex::Locker locker(m_get_thread_item_info_function_mutex);
-        
+        std::lock_guard<std::mutex> guard(m_get_thread_item_info_function_mutex);
+
         // First stage is to make the ClangUtility to hold our injected function:
 
         if (!m_get_thread_item_info_impl_code.get())
@@ -300,8 +300,7 @@
     page_to_free_size_value.SetValueType (Value::eValueTypeScalar);
     page_to_free_size_value.SetCompilerType (clang_uint64_type);
 
-
-    Mutex::Locker locker(m_get_thread_item_info_retbuffer_mutex);
+    std::lock_guard<std::mutex> guard(m_get_thread_item_info_retbuffer_mutex);
     if (m_get_thread_item_info_return_buffer_addr == LLDB_INVALID_ADDRESS)
     {
         addr_t bufaddr = process_sp->AllocateMemory (32, ePermissionsReadable | ePermissionsWritable, error);
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.h b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.h
index c1798fb..21a63e8 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.h
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.h
@@ -13,12 +13,13 @@
 // C Includes
 // C++ Includes
 #include <map>
+#include <mutex>
 #include <vector>
+
 // Other libraries and framework includes
 // Project includes
 #include "lldb/lldb-public.h"
 #include "lldb/Core/Error.h"
-#include "lldb/Host/Mutex.h"
 #include "lldb/Symbol/CompilerType.h"
 
 // This class will insert a UtilityFunction into the inferior process for
@@ -101,11 +102,10 @@
 
     lldb_private::Process *m_process;
     std::unique_ptr<UtilityFunction> m_get_thread_item_info_impl_code;
-    Mutex m_get_thread_item_info_function_mutex;
+    std::mutex m_get_thread_item_info_function_mutex;
 
     lldb::addr_t m_get_thread_item_info_return_buffer_addr;
-    Mutex m_get_thread_item_info_retbuffer_mutex;
-
+    std::mutex m_get_thread_item_info_retbuffer_mutex;
 };
 
 }  // using namespace lldb_private
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
index 37af5b8..9ec36b3 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
@@ -83,25 +83,25 @@
 //----------------------------------------------------------------------
 // Constructor
 //----------------------------------------------------------------------
-SystemRuntimeMacOSX::SystemRuntimeMacOSX (Process* process) :
-    SystemRuntime(process),
-    m_break_id(LLDB_INVALID_BREAK_ID),
-    m_mutex(Mutex::eMutexTypeRecursive),
-    m_get_queues_handler(process),
-    m_get_pending_items_handler(process),
-    m_get_item_info_handler(process),
-    m_get_thread_item_info_handler(process),
-    m_page_to_free(LLDB_INVALID_ADDRESS),
-    m_page_to_free_size(0),
-    m_lib_backtrace_recording_info(),
-    m_dispatch_queue_offsets_addr (LLDB_INVALID_ADDRESS),
-    m_libdispatch_offsets(),
-    m_libpthread_layout_offsets_addr (LLDB_INVALID_ADDRESS),
-    m_libpthread_offsets(),
-    m_dispatch_tsd_indexes_addr (LLDB_INVALID_ADDRESS),
-    m_libdispatch_tsd_indexes(),
-    m_dispatch_voucher_offsets_addr (LLDB_INVALID_ADDRESS),
-    m_libdispatch_voucher_offsets()
+SystemRuntimeMacOSX::SystemRuntimeMacOSX(Process *process)
+    : SystemRuntime(process),
+      m_break_id(LLDB_INVALID_BREAK_ID),
+      m_mutex(),
+      m_get_queues_handler(process),
+      m_get_pending_items_handler(process),
+      m_get_item_info_handler(process),
+      m_get_thread_item_info_handler(process),
+      m_page_to_free(LLDB_INVALID_ADDRESS),
+      m_page_to_free_size(0),
+      m_lib_backtrace_recording_info(),
+      m_dispatch_queue_offsets_addr(LLDB_INVALID_ADDRESS),
+      m_libdispatch_offsets(),
+      m_libpthread_layout_offsets_addr(LLDB_INVALID_ADDRESS),
+      m_libpthread_offsets(),
+      m_dispatch_tsd_indexes_addr(LLDB_INVALID_ADDRESS),
+      m_libdispatch_tsd_indexes(),
+      m_dispatch_voucher_offsets_addr(LLDB_INVALID_ADDRESS),
+      m_libdispatch_voucher_offsets()
 {
 }
 
@@ -128,7 +128,7 @@
 void
 SystemRuntimeMacOSX::Clear (bool clear_process)
 {
-    Mutex::Locker locker(m_mutex);
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
 
     if (m_process->IsAlive() && LLDB_BREAK_ID_IS_VALID(m_break_id))
         m_process->ClearBreakpointSiteByID(m_break_id);
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h
index 8fe15fa..b685a05 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h
@@ -12,8 +12,9 @@
 
 // C Includes
 // C++ Includes
-#include <vector>
+#include <mutex>
 #include <string>
+#include <vector>
 
 // Other libraries and framework include
 // Project includes
@@ -23,7 +24,6 @@
 #include "lldb/Core/StructuredData.h"
 #include "lldb/Core/UUID.h"
 #include "lldb/Host/FileSpec.h"
-#include "lldb/Host/Mutex.h"
 #include "lldb/Target/Process.h"
 #include "lldb/Target/QueueItem.h"
 
@@ -124,7 +124,7 @@
 
 protected:
     lldb::user_id_t m_break_id;
-    mutable lldb_private::Mutex m_mutex;
+    mutable std::recursive_mutex m_mutex;
 
 private:
     struct libBacktraceRecording_info {