@@ -128,6 +128,9 @@ private boolean checkRequestCredits(OpRequestSend op) {
128
128
}
129
129
} else {
130
130
pendingRequests .add (op );
131
+ if (currentPermits != REQUEST_CREDITS_UPDATER .get (this )) {
132
+ checkPendingRequests ();
133
+ }
131
134
return false ;
132
135
}
133
136
}
@@ -237,26 +240,25 @@ public void onResponse(OpRequestSend op) {
237
240
}
238
241
239
242
private void checkPendingRequests () {
240
- while (true ) {
241
- int permits = REQUEST_CREDITS_UPDATER .get (this );
242
- if (permits > 0 && pendingRequests .peek () != null ) {
243
- if (REQUEST_CREDITS_UPDATER .compareAndSet (this , permits , permits - 1 )) {
244
- OpRequestSend polled = pendingRequests .poll ();
245
- if (polled != null ) {
246
- CompletableFuture <ClientCnx > clientCnx = getClientCnx (polled .topic );
247
- if (polled .cnx != clientCnx ) {
248
- OpRequestSend invalid = polled ;
249
- polled = OpRequestSend .create (invalid .requestId , invalid .topic , invalid .cmd , invalid .cb ,
250
- clientCnx );
251
- invalid .recycle ();
252
- }
253
- endTxn (polled );
254
- } else {
255
- REQUEST_CREDITS_UPDATER .incrementAndGet (this );
243
+ int permits = REQUEST_CREDITS_UPDATER .get (this );
244
+ if (permits > 0 && pendingRequests .peek () != null ) {
245
+ if (REQUEST_CREDITS_UPDATER .compareAndSet (this , permits , permits - 1 )) {
246
+ OpRequestSend polled = pendingRequests .poll ();
247
+ if (polled != null ) {
248
+ CompletableFuture <ClientCnx > clientCnx = getClientCnx (polled .topic );
249
+ if (polled .cnx != clientCnx ) {
250
+ OpRequestSend invalid = polled ;
251
+ polled = OpRequestSend .create (invalid .requestId , invalid .topic , invalid .cmd , invalid .cb ,
252
+ clientCnx );
253
+ invalid .recycle ();
256
254
}
255
+ endTxn (polled );
256
+ } else {
257
+ REQUEST_CREDITS_UPDATER .incrementAndGet (this );
258
+ checkPendingRequests ();
257
259
}
258
260
} else {
259
- break ;
261
+ checkPendingRequests () ;
260
262
}
261
263
}
262
264
}
0 commit comments