diff --git a/examples/client_test.cpp b/examples/client_test.cpp index b95fe8479..850f2e502 100644 --- a/examples/client_test.cpp +++ b/examples/client_test.cpp @@ -1054,11 +1054,14 @@ int main(int ac, char* av[]) std::auto_ptr holder = ses.pop_alert(); save_resume_data_alert const* rd = dynamic_cast(a); - if (rd == 0) + if (!rd) { std::cout << a->msg() << std::endl; continue; } + --num_resume_data; + + if (!rd->resume_data) continue; torrent_handle h = rd->handle; boost::filesystem::ofstream out(h.save_path() @@ -1066,7 +1069,6 @@ int main(int ac, char* av[]) out.unsetf(std::ios_base::skipws); bencode(std::ostream_iterator(out), *rd->resume_data); std::cout << "fast resume data saved for " << h.name() << std::endl; - --num_resume_data; } break; } diff --git a/src/torrent.cpp b/src/torrent.cpp index 1bef95c6d..cb9a74175 100755 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -3686,8 +3686,20 @@ namespace libtorrent if (m_owning_storage.get()) { TORRENT_ASSERT(m_storage); - m_storage->async_save_resume_data( - bind(&torrent::on_save_resume_data, shared_from_this(), _1, _2)); + if (m_state == torrent_status::queued_for_checking + || m_state == torrent_status::checking_files) + { + if (alerts().should_post(alert::warning)) + { + alerts().post_alert(save_resume_data_alert(boost::shared_ptr() + , get_handle(), "won't save resume data, torrent does not have a complete resume state yet")); + } + } + else + { + m_storage->async_save_resume_data( + bind(&torrent::on_save_resume_data, shared_from_this(), _1, _2)); + } } else {