mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Do not uncompress from z_outbuf to outbuf unless outbuf is less than maximally full
svn:r188
This commit is contained in:
parent
6deed60bb5
commit
4ad74c2141
@ -147,8 +147,8 @@ connection_t *connection_new(int type) {
|
|||||||
} else {
|
} else {
|
||||||
conn->compression = conn->decompression = NULL;
|
conn->compression = conn->decompression = NULL;
|
||||||
}
|
}
|
||||||
conn->done_sending = conn->done_receiving = 0
|
|
||||||
#endif
|
#endif
|
||||||
|
conn->done_sending = conn->done_receiving = 0;
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,15 +383,22 @@ int connection_compress_from_buf(char *string, int len, connection_t *conn,
|
|||||||
|
|
||||||
int connection_decompress_to_buf(char *string, int len, connection_t *conn,
|
int connection_decompress_to_buf(char *string, int len, connection_t *conn,
|
||||||
int flush) {
|
int flush) {
|
||||||
/* This is not sane with respect to flow control; we want to spool out to
|
|
||||||
* z_outbuf, but only decompress and write as needed.
|
|
||||||
*/
|
|
||||||
int n;
|
int n;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
|
|
||||||
if (write_to_buf(string, len,
|
if (len) {
|
||||||
&conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen) < 0)
|
if (write_to_buf(string, len,
|
||||||
return -1;
|
&conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen) < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we have more that 10 payloads worth of data waiting in outbuf,
|
||||||
|
* don't uncompress any more; queue this data in z_outbuf.
|
||||||
|
*
|
||||||
|
* This check should may be different.
|
||||||
|
*/
|
||||||
|
if (connection_outbuf_too_full(conn->outbuf))
|
||||||
|
return 0;
|
||||||
|
|
||||||
n = decompress_buf_to_buf(
|
n = decompress_buf_to_buf(
|
||||||
&conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen,
|
&conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen,
|
||||||
@ -411,6 +418,7 @@ int connection_decompress_to_buf(char *string, int len, connection_t *conn,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
conn->timestamp_lastwritten = now.tv_sec;
|
conn->timestamp_lastwritten = now.tv_sec;
|
||||||
|
conn->outbuf_flushlen += n;
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user