<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mirrors/arti.git/crates/tor-proto/src/stream, branch arti-v1.2.7</title>
<subtitle>mirror of https://gitlab.torproject.org/tpo/core/arti
</subtitle>
<id>http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v1.2.7</id>
<link rel='self' href='http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v1.2.7'/>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/'/>
<updated>2024-08-28T14:27:46Z</updated>
<entry>
<title>extract tor_async_utils::oneshot into ::oneshot-fused-workaround</title>
<updated>2024-08-28T14:27:46Z</updated>
<author>
<name>Jim Newsome</name>
<email>jnewsome@torproject.org</email>
</author>
<published>2024-08-22T19:20:36Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=46f7f01092e6ac55e3e958dc3a2228b1d36e26a1'/>
<id>urn:sha1:46f7f01092e6ac55e3e958dc3a2228b1d36e26a1</id>
<content type='text'>
Having this in the `tor-async-utils` crate prevents us from doing both
of the following without introducing a circular dependency:

* using it in `tor-rtmock` (which we currently do, particularly in
  tests).
* using `tor-rtmock` to test things in `tor-async-utils`. We don't do
  this yet, but it is generally sensible to do so. In particular we
  want to move the `stream_peak` module there, which is currently tested
  with `tor-rtmock`.

Moving this into its own crate avoids this circular dependency.
</content>
</entry>
<entry>
<title>flow-control: document idea for making more robust</title>
<updated>2024-08-21T21:53:08Z</updated>
<author>
<name>Jim Newsome</name>
<email>jnewsome@torproject.org</email>
</author>
<published>2024-08-21T21:44:55Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=e5be938406282f67b26b063fd5051c3c671dc904'/>
<id>urn:sha1:e5be938406282f67b26b063fd5051c3c671dc904</id>
<content type='text'>
From
&lt;https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2340#note_3062531&gt;
</content>
</entry>
<entry>
<title>tor-proto: Encapsulate flow-control</title>
<updated>2024-08-13T19:46:46Z</updated>
<author>
<name>Jim Newsome</name>
<email>jnewsome@torproject.org</email>
</author>
<published>2024-08-12T20:49:48Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=4df401ec43b8f1c4e2eff662f1173847718cc3a4'/>
<id>urn:sha1:4df401ec43b8f1c4e2eff662f1173847718cc3a4</id>
<content type='text'>
Encapsulate flow-control into a separate object that partially abstracts
away the difference between window-based (legacy) flow control and
xon-based (prop324) flow control.
</content>
</entry>
<entry>
<title>Fix clippy::doc_lazy_continuation</title>
<updated>2024-07-08T10:36:25Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2024-07-08T10:31:47Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=c4fe208c7184c020b5418840ebc5f4044c1601c6'/>
<id>urn:sha1:c4fe208c7184c020b5418840ebc5f4044c1601c6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>proto: Try to clarify why StreamReader has a StreamTarget.</title>
<updated>2024-05-29T11:28:05Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2024-05-28T20:42:20Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=b077b68e6dc9d426beebd84bd63382287c03b02f'/>
<id>urn:sha1:b077b68e6dc9d426beebd84bd63382287c03b02f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>proto: Improve documentation about DataStream lifetimes and closing</title>
<updated>2024-05-29T11:28:05Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2024-05-28T16:52:56Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=99dcd037aa81863da56180900e8b6f0aeb143f2d'/>
<id>urn:sha1:99dcd037aa81863da56180900e8b6f0aeb143f2d</id>
<content type='text'>
In particular, clarify that dropping the DataWriter on its own does
nothing unless the DataReader is also dropped.

Related to #1368.
</content>
</entry>
<entry>
<title>proto: Make DataWriter::close actually do something.</title>
<updated>2024-05-29T11:28:01Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2024-05-28T16:30:09Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=6739f33781b957da7cb00128ba2eadc92dbabf72'/>
<id>urn:sha1:6739f33781b957da7cb00128ba2eadc92dbabf72</id>
<content type='text'>
Previously we had a bug where `&lt;DataWriter as AsyncWrite&gt;::close`
(or `shutdown` in tokio-land) would not actually have any effect.
It _would_ drop the `StreamTarget` held by the `DataWriter`, but
since the `DataReader` also held a `StreamTarget`, the
MPSC channel would not get closed, and the circuit reactor would
not realize that the stream wanted to shut down.

Now we use `mpsc::Sender::close_channel` to make our closes
effectual.

Closes #1368.

Additionally, we fix a bug where `poll_close()` never actually did
anything if the buffer had nothing in it when it was called.
Previously, `poll_flush_impl()` would exit immediately if it had no
data to flush.  That isn't what we want when we are closing!
</content>
</entry>
<entry>
<title>proto: Explicitly enforce maxima on SENDME windows.</title>
<updated>2024-05-14T14:36:05Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2024-05-14T14:36:05Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=9ffbc63e97487263a8be6550952d01094e4b026d'/>
<id>urn:sha1:9ffbc63e97487263a8be6550952d01094e4b026d</id>
<content type='text'>
No actual bug here, just technical debt:

For `SendWindow`s, our tag system already ensured that we rejected
any SENDME that didn't correspond to an appropriate drain.  Still,
it doesn't hurt to check.

For `RecvWindow`s, it would have been a protocol violation if we
ever did this, but it makes sense to make it an internal error if we
try.

Part of #1383.
</content>
</entry>
<entry>
<title>proto: Fix compilation with stream-ctrl but not experimental-api.</title>
<updated>2024-05-14T12:04:03Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2024-05-12T19:53:33Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=e7d474345fe99a8c9203f90d70b5a5b236086be3'/>
<id>urn:sha1:e7d474345fe99a8c9203f90d70b5a5b236086be3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>proto: Expose wait_for_connection as a part of the DataStream API.</title>
<updated>2024-05-09T20:34:17Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2024-05-06T19:05:15Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=489aa72d1eee8a5638493dfb23d06823a201c132'/>
<id>urn:sha1:489aa72d1eee8a5638493dfb23d06823a201c132</id>
<content type='text'>
</content>
</entry>
</feed>
