Skip to content

Commit 16fdb87

Browse files
author
olme04
authored
eliminate boxing in RequesterResponderSupport when using IntObjectMap (#1029)
1 parent 1927bf4 commit 16fdb87

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

rsocket-core/src/main/java/io/rsocket/core/RequesterResponderSupport.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.rsocket.RSocket;
88
import io.rsocket.frame.decoder.PayloadDecoder;
99
import io.rsocket.plugins.RequestInterceptor;
10+
import java.util.Objects;
1011
import java.util.function.Function;
1112
import reactor.util.annotation.Nullable;
1213

@@ -118,9 +119,14 @@ public int addAndGetNextStreamId(FrameHandler frameHandler) {
118119
}
119120

120121
public synchronized boolean add(int streamId, FrameHandler frameHandler) {
121-
final FrameHandler previousHandler = this.activeStreams.putIfAbsent(streamId, frameHandler);
122-
123-
return previousHandler == null;
122+
final IntObjectMap<FrameHandler> activeStreams = this.activeStreams;
123+
// copy of Map.putIfAbsent(key, value) without `streamId` boxing
124+
final FrameHandler previousHandler = activeStreams.get(streamId);
125+
if (previousHandler == null) {
126+
activeStreams.put(streamId, frameHandler);
127+
return true;
128+
}
129+
return false;
124130
}
125131

126132
/**
@@ -143,6 +149,13 @@ public synchronized FrameHandler get(int streamId) {
143149
* instance equals to the passed one
144150
*/
145151
public synchronized boolean remove(int streamId, FrameHandler frameHandler) {
146-
return this.activeStreams.remove(streamId, frameHandler);
152+
final IntObjectMap<FrameHandler> activeStreams = this.activeStreams;
153+
// copy of Map.remove(key, value) without `streamId` boxing
154+
final FrameHandler curValue = activeStreams.get(streamId);
155+
if (!Objects.equals(curValue, frameHandler)) {
156+
return false;
157+
}
158+
activeStreams.remove(streamId);
159+
return true;
147160
}
148161
}

0 commit comments

Comments
 (0)