75
75
import java .util .concurrent .atomic .AtomicBoolean ;
76
76
import java .util .concurrent .atomic .AtomicIntegerFieldUpdater ;
77
77
import java .util .concurrent .atomic .AtomicLong ;
78
+ import java .util .concurrent .atomic .AtomicReference ;
78
79
import java .util .function .Consumer ;
79
80
import java .util .function .Function ;
80
81
import java .util .function .Predicate ;
@@ -210,6 +211,7 @@ private ReactorNettyClient(Connection connection, TdsEncoder tdsEncoder, Connect
210
211
}
211
212
};
212
213
214
+ AtomicReference <Subscription > subscriptionRef = new AtomicReference <>();
213
215
SynchronousSink <Message > sink = new SynchronousSink <Message >() {
214
216
215
217
@ Override
@@ -250,6 +252,7 @@ public void next(Message message) {
250
252
ReactorNettyClient .this .featureAckChange .accept ((FeatureExtAckToken ) message );
251
253
}
252
254
255
+ Subscription subscription = subscriptionRef .get ();
253
256
if (AbstractDoneToken .isAttentionAck (message )) {
254
257
255
258
long current ;
@@ -260,6 +263,11 @@ public void next(Message message) {
260
263
if (DEBUG_ENABLED ) {
261
264
logger .debug (ReactorNettyClient .this .context .getMessage ("Swallowing attention acknowledged, no pending requests: {}. " ), message );
262
265
}
266
+
267
+ // update demand for dropped next signal
268
+ if (subscription != null ) {
269
+ subscription .request (1 );
270
+ }
263
271
return ;
264
272
}
265
273
@@ -272,6 +280,10 @@ public void next(Message message) {
272
280
if (DEBUG_ENABLED ) {
273
281
logger .debug (ReactorNettyClient .this .context .getMessage ("Discard message {}. Draining frames until attention acknowledgement." ), message );
274
282
}
283
+ // update demand for dropped next signal
284
+ if (subscription != null ) {
285
+ subscription .request (1 );
286
+ }
275
287
return ;
276
288
}
277
289
@@ -304,6 +316,7 @@ public Context currentContext() {
304
316
305
317
@ Override
306
318
public void onSubscribe (Subscription s ) {
319
+ subscriptionRef .set (s );
307
320
ReactorNettyClient .this .responseProcessor .onSubscribe (s );
308
321
}
309
322
0 commit comments