[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bugs-dist
Subject: [Bug 115442] Crash with KNetwork, after Revision 475735
From: Joris Guisson <joris.guisson () gmail ! com>
Date: 2005-10-31 21:14:40
Message-ID: 20051031211440.18388.qmail () ktown ! kde ! org
[Download RAW message or body]
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
http://bugs.kde.org/show_bug.cgi?id=115442
joris.guisson gmail com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
------- Additional Comments From joris.guisson gmail com 2005-10-31 22:14 -------
SVN commit 476208 by guisson:
Changes :
- Fixed 115442
- We no longer hammer the tracker to continuously after the first 5 failed attempts, \
we use a 30 seconds delay.
BUG: 115442
M +1 -0 httptracker.cpp
M +1 -1 serverauthenticate.cpp
M +47 -6 tracker.cpp
M +6 -1 tracker.h
M +1 -0 udptracker.cpp
--- trunk/extragear/network/ktorrent/libktorrent/torrent/httptracker.cpp \
#476207:476208 @ -129,6 +129,7 @
}
}
delete n;
+ updateOK();
}
void HTTPTracker::doRequest(const KURL & u)
--- trunk/extragear/network/ktorrent/libktorrent/torrent/serverauthenticate.cpp \
#476207:476208 @ -54,7 +54,7 @
finished = true;
if (!succes)
{
- delete sock;
+ sock->deleteLater();
sock = 0;
}
timer.stop();
--- trunk/extragear/network/ktorrent/libktorrent/torrent/tracker.cpp #476207:476208
@ -32,7 +32,10 @
peer_id = id;
interval = 120;
seeders = leechers = 0;
+ num_failed_attempts = 0;
connect(&update_timer,SIGNAL(timeout()),this,SLOT(onTimeout()));
+ connect(&error_update_timer,SIGNAL(timeout()),this,SLOT(onErrorTimeout()));
+ error_mode = false;
}
@ -62,15 +65,43 @
void Tracker::onTimeout()
{
- event = QString::null;
- doRequest(tor->getTrackerURL(true));
+ if (!error_mode)
+ {
+ event = QString::null;
+ doRequest(tor->getTrackerURL(true));
+ time_of_last_update = GetCurrentTime();
+ }
+ }
+
+ void Tracker::onErrorTimeout()
+ {
+ doRequest(tor->getTrackerURL(false));
time_of_last_update = GetCurrentTime();
}
+ void Tracker::updateOK()
+ {
+ error_mode = false;
+ num_failed_attempts = 0;
+ error_update_timer.stop();
+ }
+
void Tracker::handleError()
{
if (event != "stopped")
- doRequest(tor->getTrackerURL(true));
+ {
+ error_mode = true;
+ num_failed_attempts++;
+ // first try 5 times in a row
+ // after 5 attempts switch to a 30 second delay
+ if (num_failed_attempts < 5)
+ {
+ doRequest(tor->getTrackerURL(false));
+ time_of_last_update = GetCurrentTime();
+ }
+ else
+ error_update_timer.start(30*1000,true);
+ }
}
void Tracker::manualUpdate()
@ -88,10 +119,20 @
Uint32 Tracker::getTimeToNextUpdate() const
{
Uint32 s = (GetCurrentTime() - time_of_last_update) / 1000;
- if (s > interval)
- return 0;
+ if (error_mode)
+ {
+ if (s > 30)
+ return 0;
+ else
+ return 30 - s;
+ }
else
- return interval - s;
+ {
+ if (s > interval)
+ return 0;
+ else
+ return interval - s;
+ }
}
}
--- trunk/extragear/network/ktorrent/libktorrent/torrent/tracker.h #476207:476208
@ -128,6 +128,9 @
private slots:
void onTimeout();
+ void onErrorTimeout();
+ protected:
+ void updateOK();
protected:
SHA1Hash info_hash;
@ -136,8 +139,10 @
QString event;
Uint32 interval;
kt::TorrentInterface* tor;
- QTimer update_timer;
+ QTimer update_timer,error_update_timer;
Uint32 time_of_last_update;
+ Uint32 num_failed_attempts;
+ bool error_mode;
};
}
--- trunk/extragear/network/ktorrent/libktorrent/torrent/udptracker.cpp \
#476207:476208 @ -213,6 +213,7 @
i++;
}
ppeers.clear();
+ updateOK();
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic