@@ -1142,6 +1142,51 @@ public void testWorkaround858() {
1142
1142
rule .assertHasNoLeaks ();
1143
1143
}
1144
1144
1145
+ @ ParameterizedTest
1146
+ @ ValueSource (strings = {"stream" , "channel" })
1147
+ // see https://github.com/rsocket/rsocket-java/issues/959
1148
+ public void testWorkaround959 (String type ) {
1149
+ for (int i = 1 ; i < 20000 ; i += 2 ) {
1150
+ ByteBuf buffer = rule .alloc ().buffer ();
1151
+ buffer .writeCharSequence ("test" , CharsetUtil .UTF_8 );
1152
+
1153
+ final AssertSubscriber <Payload > assertSubscriber = new AssertSubscriber <>(3 );
1154
+ if (type .equals ("stream" )) {
1155
+ rule .socket .requestStream (ByteBufPayload .create (buffer )).subscribe (assertSubscriber );
1156
+ } else if (type .equals ("channel" )) {
1157
+ rule .socket
1158
+ .requestChannel (Flux .just (ByteBufPayload .create (buffer )))
1159
+ .subscribe (assertSubscriber );
1160
+ }
1161
+
1162
+ final ByteBuf payloadFrame =
1163
+ PayloadFrameCodec .encode (
1164
+ rule .alloc (), i , false , false , true , Unpooled .EMPTY_BUFFER , Unpooled .EMPTY_BUFFER );
1165
+
1166
+ RaceTestUtils .race (
1167
+ () -> {
1168
+ rule .connection .addToReceivedBuffer (payloadFrame .copy ());
1169
+ rule .connection .addToReceivedBuffer (payloadFrame .copy ());
1170
+ rule .connection .addToReceivedBuffer (payloadFrame );
1171
+ },
1172
+ () -> {
1173
+ assertSubscriber .request (1 );
1174
+ assertSubscriber .request (1 );
1175
+ assertSubscriber .request (1 );
1176
+ });
1177
+
1178
+ Assertions .assertThat (rule .connection .getSent ()).allMatch (ByteBuf ::release );
1179
+
1180
+ Assertions .assertThat (rule .socket .isDisposed ()).isFalse ();
1181
+
1182
+ assertSubscriber .values ().forEach (ReferenceCountUtil ::safeRelease );
1183
+ assertSubscriber .assertNoError ();
1184
+
1185
+ rule .connection .clearSendReceiveBuffers ();
1186
+ rule .assertHasNoLeaks ();
1187
+ }
1188
+ }
1189
+
1145
1190
public static class ClientSocketRule extends AbstractSocketRule <RSocketRequester > {
1146
1191
@ Override
1147
1192
protected RSocketRequester newRSocket () {
0 commit comments