- BUGFIX: Wait for torrent_paused_alert before reloading a torrent for full allocation mode

This commit is contained in:
Christophe Dumez 2007-08-15 19:41:12 +00:00
parent d5fa6cefe4
commit 36e87952fa
6 changed files with 30 additions and 9 deletions

View file

@ -948,6 +948,9 @@ void bittorrent::readAlerts(){
torrent_handle h = p->handle;
if(h.is_valid() && h.is_paused()){
pausedTorrents << hash;
if(reloadingTorrents.indexOf(hash) != -1){
reloadTorrent(h);
}
}else{
qDebug("Not adding torrent no pausedList, it is invalid or resumed");
}
@ -973,6 +976,22 @@ QList<QPair<QString, QString> > bittorrent::getTrackersErrors(QString hash) cons
return trackersErrors.value(hash, QList<QPair<QString, QString> >());
}
// Function to reload the torrent async after the torrent is actually
// paused so that we can get fastresume data
void bittorrent::pauseAndReloadTorrent(const torrent_handle &h){
if(!h.is_valid()){
std::cerr << "/!\\ Error: Invalid handle\n";
return;
}
// ask to pause the torrent (async)
h.pause();
QString hash = QString(misc::toString(h.info_hash()).c_str());
// Add it to reloadingTorrents list so that we now we
// we should reload the torrent once we receive the
// torrent_paused_alert. pause() is async now...
reloadingTorrents << hash;
}
// Reload a torrent with full allocation mode
void bittorrent::reloadTorrent(const torrent_handle &h){
qDebug("** Reloading a torrent");
@ -998,8 +1017,8 @@ void bittorrent::reloadTorrent(const torrent_handle &h){
torrentBackup.mkpath(torrentBackup.path());
}
// Write fast resume data
// Pause download (needed before fast resume writing)
h.pause();
// Torrent is already paused
Q_ASSERT(pausedTorrents.indexOf(fileHash) != 1);
// Extracting resume data
if (h.has_metadata()){
// get fast resume data
@ -1041,6 +1060,8 @@ void bittorrent::reloadTorrent(const torrent_handle &h){
}
}
int bittorrent::getListenPort() const{
return s->listen_port();
}