<rdar://problem/10487848>

Protect a member variable from being modified by multiple threads.



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@145920 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 3a21821..2e59bc0 100644
--- a/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -123,6 +123,7 @@
     m_gdb_comm(false),
     m_debugserver_pid (LLDB_INVALID_PROCESS_ID),
     m_last_stop_packet (),
+    m_last_stop_packet_mutex (Mutex::eMutexTypeNormal),
     m_register_info (),
     m_async_broadcaster ("lldb.process.gdb-remote.async-broadcaster"),
     m_async_thread (LLDB_INVALID_HOST_THREAD),
@@ -1548,7 +1549,7 @@
 
                 if (packet_cmd == 'W' || packet_cmd == 'X')
                 {
-                    m_last_stop_packet = response;
+                    SetLastStopPacket (response);
                     SetExitStatus(response.GetHexU8(), NULL);
                 }
             }
@@ -2353,12 +2354,12 @@
                                     case eStateStopped:
                                     case eStateCrashed:
                                     case eStateSuspended:
-                                        process->m_last_stop_packet = response;
+                                        process->SetLastStopPacket (response);
                                         process->SetPrivateState (stop_state);
                                         break;
 
                                     case eStateExited:
-                                        process->m_last_stop_packet = response;
+                                        process->SetLastStopPacket (response);
                                         response.SetFilePos(1);
                                         process->SetExitStatus(response.GetHexU8(), NULL);
                                         done = true;
diff --git a/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
index 15ccb34..5688118 100644
--- a/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
+++ b/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
@@ -271,6 +271,12 @@
         return m_gdb_comm;
     }
 
+    void
+    SetLastStopPacket (const StringExtractorGDBRemote &response)
+    {
+        lldb_private::Mutex::Locker locker (m_last_stop_packet_mutex);
+        m_last_stop_packet = response;
+    }
     //------------------------------------------------------------------
     /// Broadcaster event bits definitions.
     //------------------------------------------------------------------
@@ -284,6 +290,7 @@
     GDBRemoteCommunicationClient m_gdb_comm;
     lldb::pid_t m_debugserver_pid;
     StringExtractorGDBRemote m_last_stop_packet;
+    lldb_private::Mutex m_last_stop_packet_mutex;
     GDBRemoteDynamicRegisterInfo m_register_info;
     lldb_private::Broadcaster m_async_broadcaster;
     lldb::thread_t m_async_thread;