From 1a3561c0f7374633cd903b2dd8c4cbc946b5b3fe Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Tue, 17 Jun 2014 21:49:42 -0400 Subject: [PATCH] fix multi-segment reading --- compiler/src/test/scala/org/capnproto/EncodingTest.scala | 2 +- runtime/src/main/java/org/capnproto/WireHelpers.java | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/compiler/src/test/scala/org/capnproto/EncodingTest.scala b/compiler/src/test/scala/org/capnproto/EncodingTest.scala index 560f63c..a982de4 100644 --- a/compiler/src/test/scala/org/capnproto/EncodingTest.scala +++ b/compiler/src/test/scala/org/capnproto/EncodingTest.scala @@ -21,7 +21,7 @@ class EncodingSuite extends FunSuite { TestUtil.initTestMessage(allTypes); TestUtil.checkTestMessage(allTypes); - //TestUtil.checkTestMessage(allTypes.asReader()); + TestUtil.checkTestMessage(allTypes.asReader()); } // to debug, do this: diff --git a/runtime/src/main/java/org/capnproto/WireHelpers.java b/runtime/src/main/java/org/capnproto/WireHelpers.java index bc3bfe5..afd3995 100644 --- a/runtime/src/main/java/org/capnproto/WireHelpers.java +++ b/runtime/src/main/java/org/capnproto/WireHelpers.java @@ -111,20 +111,17 @@ final class WireHelpers { //# If the segment is null, this is an unchecked message, //# so there are no FAR pointers. if (segment != null && WirePointer.kind(ref) == WirePointer.FAR) { - SegmentReader resultSegment = segment.arena.tryGetSegment(FarPointer.getSegmentId(ref)); - int ptr = FarPointer.positionInSegment(ref); + int padOffset = FarPointer.positionInSegment(ref); + long pad = WirePointer.get(resultSegment.buffer, padOffset); int padWords = FarPointer.isDoubleFar(ref) ? 2 : 1; // TODO read limiting - int pad = ptr; - if (!FarPointer.isDoubleFar(ref)) { - return new FollowFarsResult(WirePointer.target(pad, - WirePointer.get(resultSegment.buffer, pad)), + return new FollowFarsResult(WirePointer.target(padOffset, pad), pad, resultSegment); } else { //# Landing pad is another far pointer. It is