diff options
author | David Phillips | 2013-09-10 18:30:16 +0000 |
---|---|---|
committer | David Phillips | 2013-09-10 18:30:16 +0000 |
commit | 302e7e1e425b13d5b46297bf21225d2dbb3fc9c4 (patch) | |
tree | 6f0b953ad92196d1f547be78a0163a24155274be /plugins | |
parent | 5f99e29c5a3f035c7295f8e571dd4c093945acdb (diff) | |
download | org.eclipse.osee-302e7e1e425b13d5b46297bf21225d2dbb3fc9c4.tar.gz org.eclipse.osee-302e7e1e425b13d5b46297bf21225d2dbb3fc9c4.tar.xz org.eclipse.osee-302e7e1e425b13d5b46297bf21225d2dbb3fc9c4.zip |
refinement[ats_WM4YD]: Synchronous copy operations cause exception
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResource.java | 82 |
1 files changed, 44 insertions, 38 deletions
diff --git a/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResource.java b/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResource.java index 4e0cb990901..a3af267e78d 100644 --- a/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResource.java +++ b/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResource.java @@ -46,15 +46,15 @@ public class MemoryResource { } public final String getUnfilteredASCIIString(int offset, int msb, int lsb) { - offset += _offset; - int size = (lsb - msb + 1) / 8; + offset += _offset; + int size = (lsb - msb + 1) / 8; - StringBuilder str = new StringBuilder(size); - int limit = Math.min(size, byteArray.get().length-offset); - for (int i = 0; i < limit; i++) { - str.append(getASCIICharFromOffset(offset + i)); - } - return str.toString(); + StringBuilder str = new StringBuilder(size); + int limit = Math.min(size, byteArray.get().length-offset); + for (int i = 0; i < limit; i++) { + str.append(getASCIICharFromOffset(offset + i)); + } + return str.toString(); } public void setData(byte data[]) { byteArray.set(data); @@ -115,15 +115,15 @@ public class MemoryResource { int endByte = offset + lsb / 8; endByte = endByte < length ? endByte : length; int v = data[beginByte] & 0xFF >>> msb % 8 & 0xFF; - if (endByte != beginByte) { - for (int i = beginByte + 1; i <= endByte - 1; i++) { - v <<= 8; - v |= data[i] & 0xFF; - } - v <<= 8; - v |= data[endByte] & 0xFF; - } - return (short) (v >>> 7 - lsb % 8); + if (endByte != beginByte) { + for (int i = beginByte + 1; i <= endByte - 1; i++) { + v <<= 8; + v |= data[i] & 0xFF; + } + v <<= 8; + v |= data[endByte] & 0xFF; + } + return (short) (v >>> 7 - lsb % 8); } public final int getSignedInt32(int offset, int msb, int lsb) { @@ -137,15 +137,15 @@ public class MemoryResource { int endByte = offset + lsb / 8; endByte = endByte < length ? endByte : length; int v = data[beginByte] & 0xFF >>> msb % 8 & 0xFF; - if (endByte != beginByte) { - for (int i = beginByte + 1; i <= endByte - 1; i++) { - v <<= 8; - v |= data[i] & 0xFF; - } - v <<= 8; - v |= data[endByte] & 0xFF; - } - return v >>> 7 - lsb % 8; + if (endByte != beginByte) { + for (int i = beginByte + 1; i <= endByte - 1; i++) { + v <<= 8; + v |= data[i] & 0xFF; + } + v <<= 8; + v |= data[endByte] & 0xFF; + } + return v >>> 7 - lsb % 8; } public final long getLong(int offset, int msb, int lsb) { @@ -157,15 +157,15 @@ public class MemoryResource { int endByte = offset + lsb / 8; endByte = endByte < length ? endByte : length; long v = data[beginByte] & 0xFF >>> msb % 8 & 0xFF; - if (endByte != beginByte) { - for (int i = beginByte + 1; i <= endByte - 1; i++) { - v <<= 8; - v |= data[i] & 0xFF; - } + if (endByte != beginByte) { + for (int i = beginByte + 1; i <= endByte - 1; i++) { v <<= 8; - v |= data[endByte] & 0xFF; + v |= data[i] & 0xFF; } - return v >>> 7 - lsb % 8; + v <<= 8; + v |= data[endByte] & 0xFF; + } + return v >>> 7 - lsb % 8; } else { throw new IllegalArgumentException("gettting long with bits not supported"); } @@ -413,11 +413,17 @@ public class MemoryResource { if (length + destOffset > byteArray.get().length) { throw new MessageSystemException("backing byte[] is too small for copy operation", Level.INFO); } - src.mark(); - src.get(byteArray.get(), destOffset, length); + if (src.hasArray()) { + System.arraycopy(src.array(), src.arrayOffset(), byteArray.get(), destOffset, length); + } else { + synchronized (src) { + src.mark(); + src.get(byteArray.get(), destOffset, length); + src.reset(); + } + } Arrays.fill(byteArray.get(), destOffset + length, byteArray.get().length, (byte) 0); _dataHasChanged = true; - src.reset(); } public ByteBuffer getAsBuffer() { @@ -434,11 +440,11 @@ public class MemoryResource { public ByteBuffer getAsBuffer(int offset, int length) { if (offset > byteArray.get().length) { throw new IllegalArgumentException( - "offset of " + offset + " cannot be bigger than data length of " + byteArray.get().length); + "offset of " + offset + " cannot be bigger than data length of " + byteArray.get().length); } if (offset + length > byteArray.get().length) { throw new IllegalArgumentException( - "offset (" + offset + ") plus length (" + length + ") is greater than data length of " + byteArray.get().length); + "offset (" + offset + ") plus length (" + length + ") is greater than data length of " + byteArray.get().length); } return ByteBuffer.wrap(byteArray.get(), offset, length); } |