The old code broke out of the decoding loop if btr_node_status() returned zero
which is true if no more input data is available for decoding or we already
have decoded more than 640K. However, in the first case there might still be
decoded data available to be passed to the child nodes and we should pass
that data as quick as possible to avoid buffer underruns.
So call btr_get_output_queue_size() rather than btr_node_status() to detect
the second case.
if (read_ret < 0)
goto out;
btr_add_output(out, read_ret, btrn);
- if (btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL) == 0)
+ if (btr_get_output_queue_size(btrn) > 640 * 1024)
return; /* enough data for the moment */
}
out: