diff --git a/src/main/java/net/openhft/chronicle/map/MapWireHandler.java b/src/main/java/net/openhft/chronicle/map/MapWireHandler.java index 99fe0d7bc..b28f10601 100644 --- a/src/main/java/net/openhft/chronicle/map/MapWireHandler.java +++ b/src/main/java/net/openhft/chronicle/map/MapWireHandler.java @@ -158,7 +158,6 @@ class MapWireHandler implements WireHandler, Consumer { if (hasNext) c.accept(iterator); - }); if (!hasNext) @@ -372,11 +371,16 @@ class MapWireHandler implements WireHandler, Consumer { } if ("PUT_IF_ABSENT".contentEquals(methodName)) { - writeValue(bytesMap -> { - final net.openhft.lang.io.Bytes reader = toReader(inWire, ARG_1, ARG_2); - // todo call bytesMap.putIfAbsent(reader, reader, timestamp, identifier()); - return bytesMap.putIfAbsent(reader, reader); + + + // todo call bytesMap.putIfAbsent(reader, reader, timestamp, identifier()); + writeValueFromBytes(b -> { + byte[] key = MapWireHandler.this.toByteArray(inWire, ARG_1); + byte[] value = MapWireHandler.this.toByteArray(inWire, ARG_2); + return ((Map) b.delegate).putIfAbsent(key, value); }); + + return; } @@ -633,11 +637,17 @@ class MapWireHandler implements WireHandler, Consumer { @SuppressWarnings("SameReturnValue") private void writeValue(final Function f) { + writeValueFromBytes(b -> toByteArray(f.apply(b))); + } + + + @SuppressWarnings("SameReturnValue") + private void writeValueFromBytes(final Function f) { write(b -> { - byte[] fromBytes = toByteArray(f.apply(b)); - boolean isNull = fromBytes.length == 0; + byte[] fromBytes = f.apply(b); + boolean isNull = fromBytes == null || fromBytes.length == 0; outWire.write(RESULT_IS_NULL).bool(isNull); if (isNull) return; @@ -648,7 +658,6 @@ class MapWireHandler implements WireHandler, Consumer { }); } - @SuppressWarnings("SameReturnValue") private void writeValueUsingDelegate(final Function, byte[]> f) {