forked from premiere/premiere-libtorrent
Merge pull request #302 from arvidn/fix-save-resume
fix save_resume_data in client_test
This commit is contained in:
commit
d0da753fb8
|
@ -853,11 +853,8 @@ void scan_dir(std::string const& dir_path
|
||||||
h.pause();
|
h.pause();
|
||||||
// the alert handler for save_resume_data_alert
|
// the alert handler for save_resume_data_alert
|
||||||
// will save it to disk
|
// will save it to disk
|
||||||
if (h.need_save_resume_data())
|
|
||||||
{
|
|
||||||
h.save_resume_data();
|
h.save_resume_data();
|
||||||
++num_outstanding_resume_data;
|
++num_outstanding_resume_data;
|
||||||
}
|
|
||||||
|
|
||||||
files.erase(i++);
|
files.erase(i++);
|
||||||
}
|
}
|
||||||
|
@ -1111,6 +1108,11 @@ bool handle_alert(libtorrent::session& ses, libtorrent::alert* a
|
||||||
{
|
{
|
||||||
--num_outstanding_resume_data;
|
--num_outstanding_resume_data;
|
||||||
torrent_handle h = p->handle;
|
torrent_handle h = p->handle;
|
||||||
|
if (h.is_valid())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "FAILED TO SAVE RESUME DATA: %s\n"
|
||||||
|
, h.status().name.c_str());
|
||||||
|
}
|
||||||
if (h.is_valid()
|
if (h.is_valid()
|
||||||
&& non_files.find(h) == non_files.end()
|
&& non_files.find(h) == non_files.end()
|
||||||
&& std::find_if(files.begin(), files.end()
|
&& std::find_if(files.begin(), files.end()
|
||||||
|
|
|
@ -488,6 +488,11 @@ namespace libtorrent
|
||||||
return m_need_save_resume_data || m_ses.session_time() - m_last_saved_resume > 15 * 60;
|
return m_need_save_resume_data || m_ses.session_time() - m_last_saved_resume > 15 * 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_need_save_resume()
|
||||||
|
{
|
||||||
|
m_need_save_resume_data = true;
|
||||||
|
}
|
||||||
|
|
||||||
bool is_auto_managed() const { return m_auto_managed; }
|
bool is_auto_managed() const { return m_auto_managed; }
|
||||||
void auto_managed(bool a);
|
void auto_managed(bool a);
|
||||||
|
|
||||||
|
|
|
@ -663,7 +663,6 @@ namespace libtorrent
|
||||||
m_current_gauge_state = new_gauge_state;
|
m_current_gauge_state = new_gauge_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void torrent::leave_seed_mode(bool skip_checking)
|
void torrent::leave_seed_mode(bool skip_checking)
|
||||||
{
|
{
|
||||||
if (!m_seed_mode) return;
|
if (!m_seed_mode) return;
|
||||||
|
@ -698,7 +697,7 @@ namespace libtorrent
|
||||||
m_verified.clear();
|
m_verified.clear();
|
||||||
m_verifying.clear();
|
m_verifying.clear();
|
||||||
|
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::verified(int piece)
|
void torrent::verified(int piece)
|
||||||
|
@ -756,7 +755,7 @@ namespace libtorrent
|
||||||
if (p.flags & add_torrent_params::flag_super_seeding)
|
if (p.flags & add_torrent_params::flag_super_seeding)
|
||||||
{
|
{
|
||||||
m_super_seeding = true;
|
m_super_seeding = true;
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
set_max_uploads(p.max_uploads, false);
|
set_max_uploads(p.max_uploads, false);
|
||||||
|
@ -3349,6 +3348,10 @@ namespace libtorrent
|
||||||
|| (downloaded >= 0 && m_downloaded != downloaded))
|
|| (downloaded >= 0 && m_downloaded != downloaded))
|
||||||
state_updated();
|
state_updated();
|
||||||
|
|
||||||
|
if (m_complete != complete
|
||||||
|
|| m_incomplete != incomplete
|
||||||
|
|| m_downloaded != downloaded)
|
||||||
|
{
|
||||||
m_complete = complete;
|
m_complete = complete;
|
||||||
m_incomplete = incomplete;
|
m_incomplete = incomplete;
|
||||||
m_downloaded = downloaded;
|
m_downloaded = downloaded;
|
||||||
|
@ -3356,7 +3359,8 @@ namespace libtorrent
|
||||||
update_auto_sequential();
|
update_auto_sequential();
|
||||||
|
|
||||||
// these numbers are cached in the resume data
|
// these numbers are cached in the resume data
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::tracker_response(
|
void torrent::tracker_response(
|
||||||
|
@ -4247,7 +4251,7 @@ namespace libtorrent
|
||||||
add_suggest_piece(index);
|
add_suggest_piece(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
state_updated();
|
state_updated();
|
||||||
|
|
||||||
if (m_ses.alerts().should_post<piece_finished_alert>())
|
if (m_ses.alerts().should_post<piece_finished_alert>())
|
||||||
|
@ -4298,7 +4302,7 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(index >= 0);
|
TORRENT_ASSERT(index >= 0);
|
||||||
TORRENT_ASSERT(index < m_torrent_file->num_pieces());
|
TORRENT_ASSERT(index < m_torrent_file->num_pieces());
|
||||||
|
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
inc_stats_counter(counters::num_piece_passed);
|
inc_stats_counter(counters::num_piece_passed);
|
||||||
|
|
||||||
|
@ -4929,7 +4933,7 @@ namespace libtorrent
|
||||||
if (on == m_super_seeding) return;
|
if (on == m_super_seeding) return;
|
||||||
|
|
||||||
m_super_seeding = on;
|
m_super_seeding = on;
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
if (m_super_seeding) return;
|
if (m_super_seeding) return;
|
||||||
|
|
||||||
|
@ -5012,6 +5016,13 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!need_loaded())
|
||||||
|
{
|
||||||
|
alerts().emplace_alert<save_resume_data_failed_alert>(get_handle()
|
||||||
|
, m_error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_need_save_resume_data = false;
|
m_need_save_resume_data = false;
|
||||||
m_last_saved_resume = m_ses.session_time();
|
m_last_saved_resume = m_ses.session_time();
|
||||||
write_resume_data(*j->buffer.resume_data);
|
write_resume_data(*j->buffer.resume_data);
|
||||||
|
@ -5388,7 +5399,7 @@ namespace libtorrent
|
||||||
if (filter_updated)
|
if (filter_updated)
|
||||||
{
|
{
|
||||||
// we need to save this new state
|
// we need to save this new state
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
update_peer_interest(was_finished);
|
update_peer_interest(was_finished);
|
||||||
}
|
}
|
||||||
|
@ -5429,7 +5440,7 @@ namespace libtorrent
|
||||||
if (filter_updated)
|
if (filter_updated)
|
||||||
{
|
{
|
||||||
// we need to save this new state
|
// we need to save this new state
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
update_peer_interest(was_finished);
|
update_peer_interest(was_finished);
|
||||||
remove_time_critical_pieces(pieces);
|
remove_time_critical_pieces(pieces);
|
||||||
|
@ -5816,7 +5827,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (!m_trackers.empty()) announce_with_tracker();
|
if (!m_trackers.empty()) announce_with_tracker();
|
||||||
|
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::prioritize_udp_trackers()
|
void torrent::prioritize_udp_trackers()
|
||||||
|
@ -7798,7 +7809,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -8600,7 +8611,7 @@ namespace libtorrent
|
||||||
if (m_super_seeding)
|
if (m_super_seeding)
|
||||||
{
|
{
|
||||||
m_super_seeding = false;
|
m_super_seeding = false;
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_finished() && m_state != torrent_status::finished)
|
if (is_finished() && m_state != torrent_status::finished)
|
||||||
|
@ -8763,7 +8774,7 @@ namespace libtorrent
|
||||||
|
|
||||||
m_save_path = save_path;
|
m_save_path = save_path;
|
||||||
#endif
|
#endif
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
if (alerts().should_post<storage_moved_alert>())
|
if (alerts().should_post<storage_moved_alert>())
|
||||||
{
|
{
|
||||||
|
@ -8783,7 +8794,7 @@ namespace libtorrent
|
||||||
if (alerts().should_post<storage_moved_alert>())
|
if (alerts().should_post<storage_moved_alert>())
|
||||||
alerts().emplace_alert<storage_moved_alert>(get_handle(), j->buffer.string);
|
alerts().emplace_alert<storage_moved_alert>(get_handle(), j->buffer.string);
|
||||||
m_save_path = j->buffer.string;
|
m_save_path = j->buffer.string;
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
if (j->ret == piece_manager::need_full_check)
|
if (j->ret == piece_manager::need_full_check)
|
||||||
force_recheck();
|
force_recheck();
|
||||||
}
|
}
|
||||||
|
@ -9075,7 +9086,7 @@ namespace libtorrent
|
||||||
debug_log("*** set-sequential-download: %d", sd);
|
debug_log("*** set-sequential-download: %d", sd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
state_updated();
|
state_updated();
|
||||||
}
|
}
|
||||||
|
@ -9119,7 +9130,7 @@ namespace libtorrent
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (state_update)
|
if (state_update)
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::set_max_connections(int limit, bool state_update)
|
void torrent::set_max_connections(int limit, bool state_update)
|
||||||
|
@ -9142,13 +9153,13 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state_update)
|
if (state_update)
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::set_upload_limit(int limit)
|
void torrent::set_upload_limit(int limit)
|
||||||
{
|
{
|
||||||
set_limit_impl(limit, peer_connection::upload_channel);
|
set_limit_impl(limit, peer_connection::upload_channel);
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
debug_log("*** set-upload-limit: %d", limit);
|
debug_log("*** set-upload-limit: %d", limit);
|
||||||
#endif
|
#endif
|
||||||
|
@ -9157,7 +9168,7 @@ namespace libtorrent
|
||||||
void torrent::set_download_limit(int limit)
|
void torrent::set_download_limit(int limit)
|
||||||
{
|
{
|
||||||
set_limit_impl(limit, peer_connection::download_channel);
|
set_limit_impl(limit, peer_connection::download_channel);
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
debug_log("*** set-download-limit: %d", limit);
|
debug_log("*** set-download-limit: %d", limit);
|
||||||
#endif
|
#endif
|
||||||
|
@ -9316,7 +9327,7 @@ namespace libtorrent
|
||||||
state_updated();
|
state_updated();
|
||||||
|
|
||||||
// we need to save this new state as well
|
// we need to save this new state as well
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
// recalculate which torrents should be
|
// recalculate which torrents should be
|
||||||
// paused
|
// paused
|
||||||
|
@ -9483,13 +9494,6 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_storage.get())
|
|
||||||
{
|
|
||||||
alerts().emplace_alert<save_resume_data_failed_alert>(get_handle()
|
|
||||||
, errors::destructing_torrent);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((flags & torrent_handle::only_if_modified) && !m_need_save_resume_data)
|
if ((flags & torrent_handle::only_if_modified) && !m_need_save_resume_data)
|
||||||
{
|
{
|
||||||
alerts().emplace_alert<save_resume_data_failed_alert>(get_handle()
|
alerts().emplace_alert<save_resume_data_failed_alert>(get_handle()
|
||||||
|
@ -9502,7 +9506,6 @@ namespace libtorrent
|
||||||
m_save_resume_flags = boost::uint8_t(flags);
|
m_save_resume_flags = boost::uint8_t(flags);
|
||||||
state_updated();
|
state_updated();
|
||||||
|
|
||||||
TORRENT_ASSERT(m_storage);
|
|
||||||
if (m_state == torrent_status::checking_files
|
if (m_state == torrent_status::checking_files
|
||||||
|| m_state == torrent_status::checking_resume_data)
|
|| m_state == torrent_status::checking_resume_data)
|
||||||
{
|
{
|
||||||
|
@ -9513,13 +9516,24 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// storage may be NULL during shutdown
|
||||||
|
if (!m_storage)
|
||||||
|
{
|
||||||
|
TORRENT_ASSERT(m_abort);
|
||||||
|
alerts().emplace_alert<save_resume_data_failed_alert>(get_handle()
|
||||||
|
, boost::asio::error::operation_aborted);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
boost::shared_ptr<entry> rd(new entry);
|
boost::shared_ptr<entry> rd(new entry);
|
||||||
write_resume_data(*rd);
|
write_resume_data(*rd);
|
||||||
alerts().emplace_alert<save_resume_data_alert>(rd, get_handle());
|
alerts().emplace_alert<save_resume_data_alert>(rd, get_handle());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & torrent_handle::flush_disk_cache))
|
// TODO: 3 this really needs to be moved to do_async_save_resume_data.
|
||||||
|
// flags need to be passed on
|
||||||
|
if ((flags & torrent_handle::flush_disk_cache) && m_storage.get())
|
||||||
m_ses.disk_thread().async_release_files(m_storage.get());
|
m_ses.disk_thread().async_release_files(m_storage.get());
|
||||||
|
|
||||||
m_ses.queue_async_resume_data(shared_from_this());
|
m_ses.queue_async_resume_data(shared_from_this());
|
||||||
|
@ -9602,7 +9616,7 @@ namespace libtorrent
|
||||||
m_announce_to_lsd = false;
|
m_announce_to_lsd = false;
|
||||||
|
|
||||||
// we need to save this new state
|
// we need to save this new state
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
state_updated();
|
state_updated();
|
||||||
|
|
||||||
m_graceful_pause_mode = graceful;
|
m_graceful_pause_mode = graceful;
|
||||||
|
@ -9761,7 +9775,7 @@ namespace libtorrent
|
||||||
// don't add duplicates
|
// don't add duplicates
|
||||||
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
||||||
m_web_seeds.push_back(ent);
|
m_web_seeds.push_back(ent);
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::add_web_seed(std::string const& url, web_seed_entry::type_t type
|
void torrent::add_web_seed(std::string const& url, web_seed_entry::type_t type
|
||||||
|
@ -9771,7 +9785,7 @@ namespace libtorrent
|
||||||
// don't add duplicates
|
// don't add duplicates
|
||||||
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
||||||
m_web_seeds.push_back(ent);
|
m_web_seeds.push_back(ent);
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::set_allow_peers(bool b, bool graceful)
|
void torrent::set_allow_peers(bool b, bool graceful)
|
||||||
|
@ -9834,7 +9848,7 @@ namespace libtorrent
|
||||||
update_gauge();
|
update_gauge();
|
||||||
|
|
||||||
// we need to save this new state
|
// we need to save this new state
|
||||||
m_need_save_resume_data = true;
|
set_need_save_resume();
|
||||||
|
|
||||||
update_want_scrape();
|
update_want_scrape();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue