mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 05:03:43 +01:00
Merge branch 'bug2756_relay' into maint-0.2.2
This commit is contained in:
commit
c5ffd44ccd
11
changes/bug2756
Normal file
11
changes/bug2756
Normal file
@ -0,0 +1,11 @@
|
||||
o Minor bugfixes (spec conformance, performance):
|
||||
- We now ask the other side of a stream (the client or the exit)
|
||||
for more data on that stream when the amount of queued data on
|
||||
that stream dips low enough. Previously, we wouldn't ask the
|
||||
other side for more data until either it sent us more data
|
||||
(which it wasn't supposed to do if it had exhausted its
|
||||
window!) or until we had completely flushed all our queued
|
||||
data. Fixing this should improve throughput. Fixes bug 2756;
|
||||
bugfix on the earliest released versions of Tor (svn commit
|
||||
r152).
|
||||
|
@ -3245,6 +3245,8 @@ connection_flushed_some(connection_t *conn)
|
||||
r = connection_dirserv_flushed_some(TO_DIR_CONN(conn));
|
||||
} else if (conn->type == CONN_TYPE_OR) {
|
||||
r = connection_or_flushed_some(TO_OR_CONN(conn));
|
||||
} else if (CONN_IS_EDGE(conn)) {
|
||||
r = connection_edge_flushed_some(TO_EDGE_CONN(conn));
|
||||
}
|
||||
conn->in_flushed_some = 0;
|
||||
return r;
|
||||
|
@ -301,6 +301,23 @@ connection_edge_end_errno(edge_connection_t *conn)
|
||||
return connection_edge_end(conn, reason);
|
||||
}
|
||||
|
||||
/** We just wrote some data to <b>conn</b>; act appropriately.
|
||||
*
|
||||
* (That is, if it's open, consider sending a stream-level sendme cell if we
|
||||
* have just flushed enough.)
|
||||
*/
|
||||
int
|
||||
connection_edge_flushed_some(edge_connection_t *conn)
|
||||
{
|
||||
switch (conn->_base.state) {
|
||||
case AP_CONN_STATE_OPEN:
|
||||
case EXIT_CONN_STATE_OPEN:
|
||||
connection_edge_consider_sending_sendme(conn);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Connection <b>conn</b> has finished writing and has no bytes left on
|
||||
* its outbuf.
|
||||
*
|
||||
|
@ -23,6 +23,7 @@ int connection_edge_process_inbuf(edge_connection_t *conn,
|
||||
int connection_edge_destroy(circid_t circ_id, edge_connection_t *conn);
|
||||
int connection_edge_end(edge_connection_t *conn, uint8_t reason);
|
||||
int connection_edge_end_errno(edge_connection_t *conn);
|
||||
int connection_edge_flushed_some(edge_connection_t *conn);
|
||||
int connection_edge_finished_flushing(edge_connection_t *conn);
|
||||
int connection_edge_finished_connecting(edge_connection_t *conn);
|
||||
|
||||
|
@ -1409,8 +1409,9 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
|
||||
goto repeat_connection_edge_package_raw_inbuf;
|
||||
}
|
||||
|
||||
/** Called when we've just received a relay data cell, or when
|
||||
* we've just finished flushing all bytes to stream <b>conn</b>.
|
||||
/** Called when we've just received a relay data cell, when
|
||||
* we've just finished flushing all bytes to stream <b>conn</b>,
|
||||
* or when we've flushed *some* bytes to the stream <b>conn</b>.
|
||||
*
|
||||
* If conn->outbuf is not too full, and our deliver window is
|
||||
* low, send back a suitable number of stream-level sendme cells.
|
||||
|
Loading…
Reference in New Issue
Block a user