From 808bcad05cd8e5a4a6b64f84cfb5c44c6c07d32d Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Fri, 19 Apr 2013 17:47:04 -0400 Subject: [PATCH] Add MemoryBlockRetrievalFailed() hook. Adjust RetrieveMemoryBlockJob to call said hook if we fail to fulfill the memory read request. --- src/apps/debugger/jobs/RetrieveMemoryBlockJob.cpp | 8 ++++++-- src/apps/debugger/model/TeamMemoryBlock.cpp | 14 ++++++++++++-- src/apps/debugger/model/TeamMemoryBlock.h | 5 ++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/apps/debugger/jobs/RetrieveMemoryBlockJob.cpp b/src/apps/debugger/jobs/RetrieveMemoryBlockJob.cpp index 888bfa4ae8..1a41b025ef 100644 --- a/src/apps/debugger/jobs/RetrieveMemoryBlockJob.cpp +++ b/src/apps/debugger/jobs/RetrieveMemoryBlockJob.cpp @@ -46,15 +46,19 @@ RetrieveMemoryBlockJob::Do() { ssize_t result = fTeamMemory->ReadMemory(fMemoryBlock->BaseAddress(), fMemoryBlock->Data(), fMemoryBlock->Size()); - if (result < 0) + if (result < 0) { + fMemoryBlock->NotifyDataRetrieved(result); return result; + } uint32 protection = 0; uint32 locking = 0; status_t error = get_memory_properties(fTeam->ID(), (const void *)fMemoryBlock->BaseAddress(), &protection, &locking); - if (error != B_OK) + if (error != B_OK) { + fMemoryBlock->NotifyDataRetrieved(error); return error; + } fMemoryBlock->SetWritable((protection & B_WRITE_AREA) != 0); fMemoryBlock->MarkValid(); diff --git a/src/apps/debugger/model/TeamMemoryBlock.cpp b/src/apps/debugger/model/TeamMemoryBlock.cpp index 2bae7c303d..7b906531dc 100644 --- a/src/apps/debugger/model/TeamMemoryBlock.cpp +++ b/src/apps/debugger/model/TeamMemoryBlock.cpp @@ -93,11 +93,14 @@ TeamMemoryBlock::SetWritable(bool writable) void -TeamMemoryBlock::NotifyDataRetrieved() +TeamMemoryBlock::NotifyDataRetrieved(status_t result) { for (ListenerList::Iterator it = fListeners.GetIterator(); Listener* listener = it.Next();) { - listener->MemoryBlockRetrieved(this); + if (result == B_OK) + listener->MemoryBlockRetrieved(this); + else + listener->MemoryBlockRetrievalFailed(this, result); } } @@ -123,3 +126,10 @@ void TeamMemoryBlock::Listener::MemoryBlockRetrieved(TeamMemoryBlock* block) { } + + +void +TeamMemoryBlock::Listener::MemoryBlockRetrievalFailed(TeamMemoryBlock* block, + status_t result) +{ +} diff --git a/src/apps/debugger/model/TeamMemoryBlock.h b/src/apps/debugger/model/TeamMemoryBlock.h index c02bd67069..da347b2908 100644 --- a/src/apps/debugger/model/TeamMemoryBlock.h +++ b/src/apps/debugger/model/TeamMemoryBlock.h @@ -44,7 +44,7 @@ public: bool IsWritable() const { return fWritable; } void SetWritable(bool writable); - void NotifyDataRetrieved(); + void NotifyDataRetrieved(status_t result = B_OK); protected: virtual void LastReferenceReleased(); @@ -69,6 +69,9 @@ public: virtual ~Listener(); virtual void MemoryBlockRetrieved(TeamMemoryBlock* block); + + virtual void MemoryBlockRetrievalFailed(TeamMemoryBlock* block, + status_t result); };