fix race with reading payloads

we use a bufio.Reader to synchronize reads, and it may grow while reading from
it. payloads can only come in synchronously anyway and are not interleaved.