On Sun, 04 Nov 2012 18:31:51 +0000, Roger Dingledine wrote: ...
The circuit-level flow control, or something like it, is needed because different users are competing for the same resources. But the stream-level flow control has a different threat model, since all the streams belong to the same user.
But still separate flow control is in the expectation of the, erm, this user. When I have to ssh open via tor to the same host, they take the same circuit. And I don't expect the other session to block just because I ^S-ed (stopped the output of) the first session.
...
It could be that a feature of the stream window is that there's always space in the circuit window for another begin cell, so new streams will open faster than otherwise.
Or at all. With no per-stream window a single stalled stream would block the circuit forever. Besides the ssh scenario think 'large put/post request and server hiccuping' - a twitpic post not working out does not make me expect that another browser tab to a differnt host, but same circuit, will block.
But first, if there are two or more active streams going, there won't be any extra space.
When a stream announces window to the other side I expect it to be capable to accept that data somewhere, so even if the stream windows currently overbook the circuit window that data should drain into the local buffers and let the circuit window reopen.
Andreas