Make sure to lock down the sequence mutex and select the thread we want when read or write all registers.

llvm-svn: 115992
This commit is contained in:
Greg Clayton 2010-10-07 22:06:19 +00:00
parent 139edad73a
commit 68f4b4f2a2
1 changed files with 30 additions and 15 deletions

View File

@ -373,15 +373,23 @@ GDBRemoteRegisterContext::ReadAllRegisterValues (lldb::DataBufferSP &data_sp)
{
GDBRemoteCommunication &gdb_comm = GetGDBProcess().GetGDBRemote();
StringExtractorGDBRemote response;
if (gdb_comm.SendPacketAndWaitForResponse("g", response, 1, false))
Mutex::Locker locker;
if (gdb_comm.GetSequenceMutex (locker))
{
if (response.IsErrorPacket())
return false;
response.GetStringRef().insert(0, 1, 'G');
data_sp.reset (new DataBufferHeap(response.GetStringRef().c_str(),
response.GetStringRef().size()));
return true;
if (GetGDBProcess().SetCurrentGDBRemoteThread(m_thread.GetID()))
{
if (gdb_comm.SendPacketAndWaitForResponse("g", response, 1, false))
{
if (response.IsErrorPacket())
return false;
response.GetStringRef().insert(0, 1, 'G');
data_sp.reset (new DataBufferHeap(response.GetStringRef().c_str(),
response.GetStringRef().size()));
return true;
}
}
}
return false;
}
@ -391,14 +399,21 @@ GDBRemoteRegisterContext::WriteAllRegisterValues (const lldb::DataBufferSP &data
{
GDBRemoteCommunication &gdb_comm = GetGDBProcess().GetGDBRemote();
StringExtractorGDBRemote response;
if (gdb_comm.SendPacketAndWaitForResponse((const char *)data_sp->GetBytes(),
data_sp->GetByteSize(),
response,
1,
false))
Mutex::Locker locker;
if (gdb_comm.GetSequenceMutex (locker))
{
if (response.IsOKPacket())
return true;
if (GetGDBProcess().SetCurrentGDBRemoteThread(m_thread.GetID()))
{
if (gdb_comm.SendPacketAndWaitForResponse((const char *)data_sp->GetBytes(),
data_sp->GetByteSize(),
response,
1,
false))
{
if (response.IsOKPacket())
return true;
}
}
}
return false;
}