Revert "Another attempt to fix bugs"

This reverts commit 2004e7b21f.
This commit is contained in:
Igor Katson 2024-03-29 13:00:38 +00:00
parent 2004e7b21f
commit ecb55ed32a
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
2 changed files with 9 additions and 60 deletions

View file

@ -3,16 +3,16 @@
//
// Not useful outside of librqbit.
use std::marker::PhantomData;
use serde::Deserializer;
use serde::Deserialize;
use clone_to_owned::CloneToOwned;
#[derive(Default, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
#[derive(Default, Deserialize, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
#[serde(transparent)]
pub struct ByteBufOwned(pub Box<[u8]>);
#[derive(Default, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
#[derive(Default, Deserialize, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
#[serde(transparent)]
pub struct ByteBuf<'a>(pub &'a [u8]);
pub trait ByteBufT {
@ -170,54 +170,3 @@ impl serde::ser::Serialize for ByteBufOwned {
serializer.serialize_bytes(self.as_slice())
}
}
impl<'de> serde::de::Deserialize<'de> for ByteBufOwned {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
struct Visitor;
impl<'de> serde::de::Visitor<'de> for Visitor {
type Value = ByteBufOwned;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
formatter.write_str("byte string")
}
fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(ByteBufOwned::from(v.to_owned()))
}
}
Ok(deserializer.deserialize_byte_buf(Visitor {})?)
}
}
impl<'de: 'a, 'a> serde::de::Deserialize<'de> for ByteBuf<'a> {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
#[derive(Default)]
struct Visitor<'a> {
_p: PhantomData<&'a ()>,
}
impl<'de: 'a, 'a> serde::de::Visitor<'de> for Visitor<'a> {
type Value = ByteBuf<'a>;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
formatter.write_str("byte string")
}
fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(ByteBuf::from(v))
}
}
Ok(deserializer.deserialize_byte_buf(Visitor::default())?)
}
}

View file

@ -248,10 +248,10 @@ impl TorrentStateLive {
let stats = state.stats_snapshot();
let fetched = stats.fetched_bytes;
let needed = state.initially_needed();
// TODO: this is very coarse, as it doesn't capture partially
// downloaded pieces. But it's better than using "fetched" which is bugged,
// see #92
let remaining = needed - stats.downloaded_and_checked_bytes;
// fetched can be too high in theory, so for safety make sure that it doesn't wrap around u64.
let remaining = needed
.wrapping_sub(fetched)
.min(needed - stats.downloaded_and_checked_bytes);
state
.down_speed_estimator
.add_snapshot(fetched, Some(remaining), now);