In the receivers fetch() implementation, after waiting for draining to complete a call to _grant() is made - I assume to replenish the drained credit. However that call will not actually result in any more credit being issued when made during the first fetch() call in the above example. The returned count has not yet been updated, so granted remains at 1. In the drivers grant() call for the receiver, the delta is computed to be 0 (granted, received and impending are all 1). Only during the second fetch() call, after draining, is the _grant() call on the receiver reissued and at that point the returned counter has been updated so a message-flow is triggered - however this happens after the flush and so the fetch() will usually not return it.