1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-03-13 23:48:49 +00:00

refactor: respond immediately to block requests from peer (#7029)

* refactor: respond immediately to block requests from peer

* refactor: extract `fill_output_buffer()` impl method
This commit is contained in:
Yat Ho 2025-03-10 08:45:08 +08:00 committed by GitHub
parent 47eb4ee2bc
commit 49e0e59763
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -559,6 +559,8 @@ private:
if (can_add_request_from_peer(req)) if (can_add_request_from_peer(req))
{ {
peer_requested_.emplace_back(req); peer_requested_.emplace_back(req);
fill_output_buffer(tr_time(), tr_time_msec());
} }
else if (io_->supports_fext()) else if (io_->supports_fext())
{ {
@ -607,7 +609,14 @@ private:
void maybe_send_metadata_requests(time_t now) const; void maybe_send_metadata_requests(time_t now) const;
[[nodiscard]] size_t add_next_metadata_piece(); [[nodiscard]] size_t add_next_metadata_piece();
[[nodiscard]] size_t add_next_block(time_t now_sec, uint64_t now_msec); [[nodiscard]] size_t add_next_block(time_t now_sec, uint64_t now_msec);
[[nodiscard]] size_t fill_output_buffer(time_t now_sec, uint64_t now_msec);
[[nodiscard]] size_t fill_output_buffer_impl(time_t now_sec, uint64_t now_msec);
void fill_output_buffer(time_t now_sec, uint64_t now_msec)
{
while (fill_output_buffer_impl(now_sec, now_msec) != 0U)
{
}
}
// --- // ---
@ -1834,14 +1843,7 @@ void tr_peerMsgsImpl::pulse()
update_desired_request_count(); update_desired_request_count();
maybe_send_block_requests(); maybe_send_block_requests();
maybe_send_metadata_requests(now_sec); maybe_send_metadata_requests(now_sec);
fill_output_buffer(now_sec, now_msec);
for (;;)
{
if (fill_output_buffer(now_sec, now_msec) == 0U)
{
break;
}
}
} }
void tr_peerMsgsImpl::maybe_send_metadata_requests(time_t now) const void tr_peerMsgsImpl::maybe_send_metadata_requests(time_t now) const
@ -1901,7 +1903,7 @@ void tr_peerMsgsImpl::check_request_timeout(time_t now)
} }
} }
[[nodiscard]] size_t tr_peerMsgsImpl::fill_output_buffer(time_t now_sec, uint64_t now_msec) [[nodiscard]] size_t tr_peerMsgsImpl::fill_output_buffer_impl(time_t now_sec, uint64_t now_msec)
{ {
auto n_bytes_written = size_t{}; auto n_bytes_written = size_t{};