1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[250009] The memory service only clears its cache on ContainerSupended/Resumed events. Since these events are no longer used in non-stop mode, the cache was never

cleared.  The cache should be cleared on all Isuspended/IResumed events.

Some minor cleanup was also done.
This commit is contained in:
Marc Khouzam 2008-10-07 18:48:29 +00:00
parent 06c0d8e309
commit b1ec6ca223

View file

@ -137,9 +137,6 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
// Remove event listener // Remove event listener
getSession().removeServiceEventListener(this); getSession().removeServiceEventListener(this);
// Clear the cache
fMemoryCache.reset();
// Complete the shutdown // Complete the shutdown
super.shutdown(requestMonitor); super.shutdown(requestMonitor);
} }
@ -285,10 +282,11 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
public void eventDispatched(IResumedDMEvent e) { public void eventDispatched(IResumedDMEvent e) {
if (e instanceof IContainerResumedDMEvent) { if (e instanceof IContainerResumedDMEvent) {
fMemoryCache.setTargetAvailable(e.getDMContext(), false); fMemoryCache.setTargetAvailable(e.getDMContext(), false);
if (e.getReason() != StateChangeReason.STEP) {
fMemoryCache.reset();
}
} }
if (e.getReason() != StateChangeReason.STEP) {
fMemoryCache.reset();
}
} }
/** /**
@ -299,8 +297,8 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
public void eventDispatched(ISuspendedDMEvent e) { public void eventDispatched(ISuspendedDMEvent e) {
if (e instanceof IContainerSuspendedDMEvent) { if (e instanceof IContainerSuspendedDMEvent) {
fMemoryCache.setTargetAvailable(e.getDMContext(), true); fMemoryCache.setTargetAvailable(e.getDMContext(), true);
fMemoryCache.reset();
} }
fMemoryCache.reset();
} }
/** /**
@ -796,7 +794,7 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
{ {
// Check if we already cache part of this memory area (which means it // Check if we already cache part of this memory area (which means it
// is used by a memory service client that will have to be updated) // is used by a memory service client that will have to be updated)
LinkedList<MemoryBlock> list = fMemoryCache.getListOfMissingBlocks(address, count); LinkedList<MemoryBlock> list = getListOfMissingBlocks(address, count);
int sizeToRead = 0; int sizeToRead = 0;
for (MemoryBlock block : list) { for (MemoryBlock block : list) {
sizeToRead += block.fLength; sizeToRead += block.fLength;
@ -815,12 +813,12 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
} }
// Read the corresponding memory block // Read the corresponding memory block
fMemoryCache.fCommandCache.reset(); fCommandCache.reset();
fMemoryCache.readMemoryBlock(memoryDMC, address, 0, 1, count, readMemoryBlock(memoryDMC, address, 0, 1, count,
new DataRequestMonitor<MemoryByte[]>(getExecutor(), rm) { new DataRequestMonitor<MemoryByte[]>(getExecutor(), rm) {
@Override @Override
protected void handleSuccess() { protected void handleSuccess() {
MemoryByte[] oldBlock = fMemoryCache.getMemoryBlockFromCache(address, count); MemoryByte[] oldBlock = getMemoryBlockFromCache(address, count);
MemoryByte[] newBlock = getData(); MemoryByte[] newBlock = getData();
boolean blocksDiffer = false; boolean blocksDiffer = false;
for (int i = 0; i < oldBlock.length; i++) { for (int i = 0; i < oldBlock.length; i++) {
@ -830,7 +828,7 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
} }
} }
if (blocksDiffer) { if (blocksDiffer) {
fMemoryCache.updateMemoryCache(address, count, newBlock); updateMemoryCache(address, count, newBlock);
getSession().dispatchEvent(new MemoryChangedEvent(memoryDMC, addresses), getProperties()); getSession().dispatchEvent(new MemoryChangedEvent(memoryDMC, addresses), getProperties());
} }
rm.done(); rm.done();