Add MemoryBlockRetrievalFailed() hook.

Adjust RetrieveMemoryBlockJob to call said hook if we fail to fulfill
the memory read request.
This commit is contained in:
Rene Gollent
2013-04-19 17:47:04 -04:00
parent ad9496c20c
commit 808bcad05c
3 changed files with 22 additions and 5 deletions
@@ -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();
+12 -2
View File
@@ -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)
{
}
+4 -1
View File
@@ -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);
};