James Cloos <cloos@xxxxxxxxxxx> writes: > |> Therefore, in practice — and as I have witnessed several thousand times > |> without ever having seen a contrary example — display_throughput() is > |> called *durring* a download only when total & 0xFFF == 0xFFF. > > Another possibility is an off-by-one error. The relevant part of fill() > looks like: > > ,----< excerpt from index-pack.c:fill() > > | do { > | ssize_t ret = xread(input_fd, input_buffer + input_len, > | sizeof(input_buffer) - input_len); > | if (ret <= 0) { > | if (!ret) > | die("early EOF"); > | die("read error on input: %s", strerror(errno)); > | } > | input_len += ret; > | if (from_stdin) > | display_throughput(progress, consumed_bytes + input_len); > | } while (input_len < min); > | return input_buffer; > | } > `---- > > if *(input_buffer + ret) is the last read octet rather than the next > empty octet, that would also explain what I see. After checking "ret" from xread(), input_len is incremented by that amount, and the next iteration gives "input_buffer + input_len" to xread(). If input_buffer[ret] _were_ the last octet read, your loop would be discarding that octet when you call more than one xread() to fill the buffer. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html