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

Bug 387688: Memory cache update fix

Change-Id: Ic2d14de4381a58cf124a1db01ae0e72533625e44
Reviewed-on: https://git.eclipse.org/r/7447
Reviewed-by: Marc Khouzam <marc.khouzam@ericsson.com>
IP-Clean: Marc Khouzam <marc.khouzam@ericsson.com>
Tested-by: Marc Khouzam <marc.khouzam@ericsson.com>
This commit is contained in:
John Dallaway 2012-09-24 13:54:41 +01:00 committed by Marc Khouzam
parent 285434b5e0
commit 57c9d6bd71

View file

@ -12,6 +12,7 @@
* Ericsson AB - added memory cache * Ericsson AB - added memory cache
* Vladimir Prus (CodeSourcery) - support for -data-read-memory-bytes (bug 322658) * Vladimir Prus (CodeSourcery) - support for -data-read-memory-bytes (bug 322658)
* John Dallaway - support for -data-write-memory-bytes (bug 387793) * John Dallaway - support for -data-write-memory-bytes (bug 387793)
* John Dallaway - memory cache update fix (bug 387688)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.dsf.mi.service; package org.eclipse.cdt.dsf.mi.service;
@ -841,12 +842,20 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
System.arraycopy(modBlock, 0, cachedBlock.fBlock, pos, count); System.arraycopy(modBlock, 0, cachedBlock.fBlock, pos, count);
} }
// Case where the cached block is completely included in the modified block
else if (modBlockStart.distanceTo(cachedBlockStart).longValue() >= 0
&& cachedBlockEnd.distanceTo(modBlockEnd).longValue() >= 0)
{
int pos = (int) modBlockStart.distanceTo(cachedBlockStart).longValue();
System.arraycopy(modBlock, pos, cachedBlock.fBlock, 0, (int) cachedBlock.fLength);
}
// Case where the beginning of the modified block is within the cached block // Case where the beginning of the modified block is within the cached block
else if (cachedBlockStart.distanceTo(modBlockStart).longValue() >= 0 else if (cachedBlockStart.distanceTo(modBlockStart).longValue() >= 0
&& modBlockStart.distanceTo(cachedBlockEnd).longValue() > 0) && modBlockStart.distanceTo(cachedBlockEnd).longValue() > 0)
{ {
int pos = (int) cachedBlockStart.distanceTo(modBlockStart).longValue(); int pos = (int) cachedBlockStart.distanceTo(modBlockStart).longValue();
int length = (int) cachedBlockStart.distanceTo(modBlockEnd).longValue(); int length = (int) modBlockStart.distanceTo(cachedBlockEnd).longValue();
System.arraycopy(modBlock, 0, cachedBlock.fBlock, pos, length); System.arraycopy(modBlock, 0, cachedBlock.fBlock, pos, length);
} }