Skip to content

Commit

Permalink
fix: 4.0.0 regression that broke speed limits for utp peers
Browse files Browse the repository at this point in the history
Fixes #4701.
  • Loading branch information
ckerr committed Feb 27, 2023
1 parent ac31932 commit 6132e74
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion libtransmission/peer-io.cc
Expand Up @@ -733,7 +733,16 @@ void tr_peerIo::utp_init([[maybe_unused]] struct_utp_context* ctx)
{
if (auto const* const io = static_cast<tr_peerIo*>(utp_get_userdata(args->socket)); io != nullptr)
{
return std::size(io->inbuf_);
// We use this callback to enforce speed limits by telling
// libutp to read no more than `target_dl_bytes` bytes.
auto const target_dl_bytes = io->bandwidth_.clamp(TR_DOWN, RcvBuf);

// libutp's private function get_rcv_window() allows libutp
// to read up to (UTP_RCVBUF - READ_BUFFER_SIZE) bytes and
// UTP_RCVBUF is set to `RcvBuf` by tr_peerIo::utp_init().
// So to limit dl to `target_dl_bytes`, we need to return
// N where (`target_dl_bytes` == RcvBuf - N).
return RcvBuf - target_dl_bytes;
}
return {};
});
Expand Down

0 comments on commit 6132e74

Please sign in to comment.