in tchannel-core/src/main/java/com/uber/tchannel/handlers/ResponseRouter.java [94:123]
protected void sendRequest() {
if (!busy.compareAndSet(false, true)) {
return;
}
Channel channel = ctx.channel();
try {
boolean flush = false;
while (!requestQueue.isEmpty() && channel.isWritable()) {
long id = requestQueue.poll();
OutRequest<?> outRequest = requestMap.get(id);
if (outRequest != null) {
outRequest.setChannelFuture(channel.write(outRequest.getRequest()));
flush = true;
}
}
if (flush) {
channel.flush();
}
} finally {
busy.set(false);
}
// in case there are new request added
if (channel.isWritable() && !requestQueue.isEmpty()) {
sendRequest();
}
}