mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Merge remote branch 'origin/maint-0.2.2'
This commit is contained in:
commit
737228ed8e
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).
|
||||||
|
|
@ -3648,6 +3648,8 @@ connection_flushed_some(connection_t *conn)
|
|||||||
r = connection_dirserv_flushed_some(TO_DIR_CONN(conn));
|
r = connection_dirserv_flushed_some(TO_DIR_CONN(conn));
|
||||||
} else if (conn->type == CONN_TYPE_OR) {
|
} else if (conn->type == CONN_TYPE_OR) {
|
||||||
r = connection_or_flushed_some(TO_OR_CONN(conn));
|
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;
|
conn->in_flushed_some = 0;
|
||||||
return r;
|
return r;
|
||||||
|
@ -301,6 +301,23 @@ connection_edge_end_errno(edge_connection_t *conn)
|
|||||||
return connection_edge_end(conn, reason);
|
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
|
/** Connection <b>conn</b> has finished writing and has no bytes left on
|
||||||
* its outbuf.
|
* 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_destroy(circid_t circ_id, edge_connection_t *conn);
|
||||||
int connection_edge_end(edge_connection_t *conn, uint8_t reason);
|
int connection_edge_end(edge_connection_t *conn, uint8_t reason);
|
||||||
int connection_edge_end_errno(edge_connection_t *conn);
|
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_flushing(edge_connection_t *conn);
|
||||||
int connection_edge_finished_connecting(edge_connection_t *conn);
|
int connection_edge_finished_connecting(edge_connection_t *conn);
|
||||||
|
|
||||||
|
@ -1403,8 +1403,9 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
|
|||||||
goto repeat_connection_edge_package_raw_inbuf;
|
goto repeat_connection_edge_package_raw_inbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when we've just received a relay data cell, or when
|
/** Called when we've just received a relay data cell, when
|
||||||
* we've just finished flushing all bytes to stream <b>conn</b>.
|
* 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
|
* If conn->outbuf is not too full, and our deliver window is
|
||||||
* low, send back a suitable number of stream-level sendme cells.
|
* low, send back a suitable number of stream-level sendme cells.
|
||||||
|
Loading…
Reference in New Issue
Block a user