mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-02-23 19:29:40 +08:00
Fix possible crash on qBittorrent shutdown
This commit is contained in:
parent
0a2efaf5fc
commit
390508e7db
src
@ -1534,13 +1534,15 @@ void QBtSession::saveFastResumeData() {
|
|||||||
for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) {
|
for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) {
|
||||||
QTorrentHandle h = QTorrentHandle(*torrentIT);
|
QTorrentHandle h = QTorrentHandle(*torrentIT);
|
||||||
if(!h.is_valid() || !h.has_metadata()) continue;
|
if(!h.is_valid() || !h.has_metadata()) continue;
|
||||||
if(isQueueingEnabled())
|
try {
|
||||||
TorrentPersistentData::savePriority(h);
|
if(isQueueingEnabled())
|
||||||
// Actually with should save fast resume data for paused files too
|
TorrentPersistentData::savePriority(h);
|
||||||
//if(h.is_paused()) continue;
|
// Actually with should save fast resume data for paused files too
|
||||||
if(h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking) continue;
|
//if(h.is_paused()) continue;
|
||||||
h.save_resume_data();
|
if(h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking) continue;
|
||||||
++num_resume_data;
|
h.save_resume_data();
|
||||||
|
++num_resume_data;
|
||||||
|
} catch(libtorrent::invalid_handle&) {}
|
||||||
}
|
}
|
||||||
while (num_resume_data > 0) {
|
while (num_resume_data > 0) {
|
||||||
alert const* a = s->wait_for_alert(seconds(30));
|
alert const* a = s->wait_for_alert(seconds(30));
|
||||||
@ -1556,7 +1558,8 @@ void QBtSession::saveFastResumeData() {
|
|||||||
s->pop_alert();
|
s->pop_alert();
|
||||||
try {
|
try {
|
||||||
// Remove torrent from session
|
// Remove torrent from session
|
||||||
s->remove_torrent(rda->handle);
|
if(rda->handle.is_valid())
|
||||||
|
s->remove_torrent(rda->handle);
|
||||||
}catch(libtorrent::libtorrent_exception){}
|
}catch(libtorrent::libtorrent_exception){}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1571,16 +1574,18 @@ void QBtSession::saveFastResumeData() {
|
|||||||
QDir torrentBackup(misc::BTBackupLocation());
|
QDir torrentBackup(misc::BTBackupLocation());
|
||||||
const QTorrentHandle h(rd->handle);
|
const QTorrentHandle h(rd->handle);
|
||||||
if(!h.is_valid()) continue;
|
if(!h.is_valid()) continue;
|
||||||
// Remove old fastresume file if it exists
|
try {
|
||||||
const QString file = torrentBackup.absoluteFilePath(h.hash()+".fastresume");
|
// Remove old fastresume file if it exists
|
||||||
if(QFile::exists(file))
|
const QString file = torrentBackup.absoluteFilePath(h.hash()+".fastresume");
|
||||||
misc::safeRemove(file);
|
if(QFile::exists(file))
|
||||||
boost::filesystem::ofstream out(boost::filesystem::path(file.toLocal8Bit().constData()), std::ios_base::binary);
|
misc::safeRemove(file);
|
||||||
out.unsetf(std::ios_base::skipws);
|
boost::filesystem::ofstream out(boost::filesystem::path(file.toLocal8Bit().constData()), std::ios_base::binary);
|
||||||
bencode(std::ostream_iterator<char>(out), *rd->resume_data);
|
out.unsetf(std::ios_base::skipws);
|
||||||
// Remove torrent from session
|
bencode(std::ostream_iterator<char>(out), *rd->resume_data);
|
||||||
s->remove_torrent(rd->handle);
|
// Remove torrent from session
|
||||||
s->pop_alert();
|
s->remove_torrent(rd->handle);
|
||||||
|
s->pop_alert();
|
||||||
|
} catch(libtorrent::invalid_handle&){}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,9 @@ enum FilePriority {IGNORED=0, NORMAL=1, HIGH=2, MAXIMUM=7};
|
|||||||
enum TreeItemType {TFILE, FOLDER, ROOT};
|
enum TreeItemType {TFILE, FOLDER, ROOT};
|
||||||
|
|
||||||
class TreeItem {
|
class TreeItem {
|
||||||
|
private:
|
||||||
|
enum TreeItemColumns {COL_NAME, COL_SIZE, COL_PROGRESS, COL_PRIO};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<TreeItem*> childItems;
|
QList<TreeItem*> childItems;
|
||||||
QList<QVariant> itemData;
|
QList<QVariant> itemData;
|
||||||
|
Loading…
Reference in New Issue
Block a user