diff --git a/src/or/buffers.c b/src/or/buffers.c index 5bdc8e73eb..424e2fe9e6 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -52,9 +52,14 @@ int read_to_buf(int s, int at_most, char **buf, int *buflen, int *buf_datalen, i if(!options.LinkPadding && at_most > 10*sizeof(cell_t)) { /* if no linkpadding: do a rudimentary round-robin so one - * connection can't hog an outgoing connection + * connection can't hog a thickpipe + */ + at_most = 10*(CELL_PAYLOAD_SIZE - TOPIC_HEADER_SIZE); + /* XXX this still isn't perfect. now we read 10 data payloads per read -- + * but if we're reading from a connection that speaks cells, we always + * read a partial cell from the network and can't process it yet. Good + * enough for now though. (And maybe best, to stress our code more.) */ - at_most = 10*sizeof(cell_t); /* FIXME should be 10* size of usable payload */ } // log(LOG_DEBUG,"read_to_buf(): reading at most %d bytes.",at_most);