From a6938caad43a973ae37cd21c3d584cbf117a1da9 Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Mon, 2 Feb 2015 08:28:57 +0000 Subject: [PATCH] fixed NPE - java.lang.NullPointerException at net.openhft.chronicle.map.StatelessChronicleMap.receiveBytesFromSocket(StatelessChronicleMap.java:1322) at net.openhft.chronicle.map.StatelessChronicleMap.nextEntry(StatelessChronicleMap.java:1216) at net.openhft.chronicle.map.StatelessChronicleMap.blockingFetchThrowable(StatelessChronicleMap.java:1162) at net.openhft.chronicle.map.StatelessChronicleMap.blockingFetchReadOnly(StatelessChronicleMap.java:1135) at net.openhft.chronicle.map.StatelessChronicleMap.readValue(StatelessChronicleMap.java:1484) at net.openhft.chronicle.map.StatelessChronicleMap.fetchObject(StatelessChronicleMap.java:1782) at net.openhft.chronicle.map.StatelessChronicleMap.put(StatelessChronicleMap.java:596) at net.openhft.chronicle.map.StatelessClientTest$3.run(StatelessClientTest.java:659) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) --- .../openhft/chronicle/map/StatelessChronicleMap.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java b/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java index b8c64cac7..6c3216d30 100644 --- a/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java @@ -81,7 +81,7 @@ class StatelessChronicleMap implements ChronicleMap, Closeable, Clon private final InetSocketAddress remoteAddress; private final long timeoutMs; private final int tcpBufferSize; - + private Class kClass; private Class vClass; private boolean putReturnsNull; @@ -376,7 +376,7 @@ class StatelessChronicleMap implements ChronicleMap, Closeable, Clon // read a single byte back while (this.connectionOutBuffer.position() <= 0) { int read = clientChannel.read(this.connectionOutBuffer);// the remote identifier - if (read ==-1) + if (read == -1) throw new IOException("server conncetion closed"); checkTimeout(timeoutTime); } @@ -1308,6 +1308,7 @@ class StatelessChronicleMap implements ChronicleMap, Closeable, Clon @SuppressWarnings("UnusedReturnValue") private Bytes receiveBytesFromSocket(int requiredNumberOfBytes, long timeoutTime) throws IOException { + // assert !outBytesLock.isHeldByCurrentThread(); assert inBytesLock.isHeldByCurrentThread(); @@ -1315,11 +1316,14 @@ class StatelessChronicleMap implements ChronicleMap, Closeable, Clon inBytes.limit(requiredNumberOfBytes); inBytes.buffer().position(0); inBytes.buffer().limit(requiredNumberOfBytes); + SocketChannel clientChannel0 = clientChannel; + if (clientChannel0 == null) + return inBytes; while (inBytes.buffer().remaining() > 0) { assert requiredNumberOfBytes <= inBytes.capacity(); - int len = clientChannel.read(inBytes.buffer()); + int len = clientChannel0.read(inBytes.buffer()); if (len == -1) throw new IORuntimeException("Disconnection to server");