For some unknown reason the download count is reset
to zero when it is completed.
This results in invalid counts being sent to the tracker.
A fix is to comment out all calls to ResetDLTimer() and
ResetULTimer() but these may be there for another
reason and resetting the counts is an undesirable
consequence of their real reason.
Logged In: YES
user_id=136143
I'm guessing the ResetDLTimer is just for rate estimating
purposes. So I think this would work.
--- ctorrent-1.3.4-orig/rate.h 2004-09-08 16:10:51.000000000
-0700
+++ ctorrent-1.3.4-current/rate.h 2005-06-16
02:58:09.000000000 -0700
@@ -10,9 +10,10 @@
time_t m_last_timestamp;
time_t m_total_timeused;
u_int64_t m_count_bytes;
+ u_int64_t m_recent_base;
public:
- Rate(){ m_last_timestamp = m_total_timeused = (time_t)0;
m_count_bytes = 0; }
- void Reset(){ m_last_timestamp = m_total_timeused =
(time_t)0; m_count_bytes = 0;}
+ Rate(){ m_last_timestamp = m_total_timeused = (time_t)0;
m_recent_base = m_count_bytes = 0; }
+ void Reset(){ m_last_timestamp = m_total_timeused =
(time_t)0; m_recent_base = m_count_bytes;}
void StartTimer();
void StopTimer();
void CountAdd(size_t nbytes);
--- ctorrent-1.3.4-orig/rate.cpp 2004-09-08
16:10:51.000000000 -0700
+++ ctorrent-1.3.4-current/rate.cpp 2005-06-16
02:59:37.000000000 -0700
@@ -29,14 +29,14 @@
time_t timeused = m_total_timeused;
if( m_last_timestamp ) timeused += (time((time_t*) 0) -
m_last_timestamp);
if( timeused < 1 ) timeused = 1;
- return (size_t)(m_count_bytes / timeused);
+ return (size_t)((m_count_bytes - m_recent_base) / timeused);
}
size_t Rate::RateMeasure(const Rate &ra_to) const
{
time_t timeused = time((time_t*) 0) - m_last_timestamp;
if( timeused < 1 ) timeused = 1;
- return (size_t)((ra_to.m_count_bytes - m_count_bytes) /
timeused);
+ return (size_t)(((ra_to.m_count_bytes -
ra_to.m_recent_base) - (m_count_bytes - m_recent_base)) /
timeused);
}
time_t Rate::TimeUsed(const time_t *pnow) const