mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-18 07:06:18 +00:00
fix: define default_resume_flags sentinel, clearing open_enable_fallocate
Replace the raw ~uint32_t sentinel with a named constant Download::default_resume_flags that masks out the open_enable_fallocate bit. This prevents flag_fallocate from being set on all files when open_throw() reads resume_flags() before explicit flags are configured. The sentinel value (~uint32_t & ~open_enable_fallocate) retains the full range as a 'not set' marker while being safe to pass through Download::open() without unintended fallocate.
This commit is contained in:
+3
-1
@@ -22,6 +22,8 @@ public:
|
|||||||
typedef torrent::ConnectionList connection_list_type;
|
typedef torrent::ConnectionList connection_list_type;
|
||||||
typedef download_type::ConnectionType connection_type;
|
typedef download_type::ConnectionType connection_type;
|
||||||
|
|
||||||
|
static constexpr uint32_t default_resume_flags = ~uint32_t{} & ~torrent::Download::open_enable_fallocate;
|
||||||
|
|
||||||
static const int variable_hashing_stopped = 0;
|
static const int variable_hashing_stopped = 0;
|
||||||
static const int variable_hashing_initial = 1;
|
static const int variable_hashing_initial = 1;
|
||||||
static const int variable_hashing_last = 2;
|
static const int variable_hashing_last = 2;
|
||||||
@@ -100,7 +102,7 @@ private:
|
|||||||
download_type m_download;
|
download_type m_download;
|
||||||
bool m_hashFailed{};
|
bool m_hashFailed{};
|
||||||
std::string m_message;
|
std::string m_message;
|
||||||
uint32_t m_resumeFlags{~uint32_t{}};
|
uint32_t m_resumeFlags{default_resume_flags};
|
||||||
unsigned int m_group{};
|
unsigned int m_group{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ DownloadList::resume(Download* download, int flags) {
|
|||||||
|
|
||||||
// We need to make sure the flags aren't reset if someone decideds
|
// We need to make sure the flags aren't reset if someone decideds
|
||||||
// to call resume() while it is hashing, etc.
|
// to call resume() while it is hashing, etc.
|
||||||
if (download->resume_flags() == ~uint32_t())
|
if (download->resume_flags() == Download::default_resume_flags)
|
||||||
download->set_resume_flags(flags);
|
download->set_resume_flags(flags);
|
||||||
|
|
||||||
// Manual or end-of-download rehashing clears the resume data so
|
// Manual or end-of-download rehashing clears the resume data so
|
||||||
@@ -404,7 +404,7 @@ DownloadList::resume(Download* download, int flags) {
|
|||||||
download->set_priority(download->priority());
|
download->set_priority(download->priority());
|
||||||
download->download()->start(download->resume_flags());
|
download->download()->start(download->resume_flags());
|
||||||
|
|
||||||
download->set_resume_flags(~uint32_t());
|
download->set_resume_flags(Download::default_resume_flags);
|
||||||
|
|
||||||
DL_TRIGGER_EVENT(download, "event.download.resumed");
|
DL_TRIGGER_EVENT(download, "event.download.resumed");
|
||||||
|
|
||||||
@@ -421,7 +421,7 @@ DownloadList::pause(Download* download, int flags) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
download->set_resume_flags(~uint32_t());
|
download->set_resume_flags(Download::default_resume_flags);
|
||||||
|
|
||||||
rpc::parse_command_single(rpc::make_target(download), "view.set_not_visible=active");
|
rpc::parse_command_single(rpc::make_target(download), "view.set_not_visible=active");
|
||||||
|
|
||||||
@@ -660,8 +660,8 @@ DownloadList::confirm_finished(Download* download) {
|
|||||||
if (find(infohash) == end())
|
if (find(infohash) == end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if (download->resume_flags() != ~uint32_t())
|
// if (download->resume_flags() != Download::default_resume_flags)
|
||||||
// throw torrent::internal_error("DownloadList::confirm_finished(...) download->resume_flags() != ~uint32_t().");
|
// throw torrent::internal_error("DownloadList::confirm_finished(...) download->resume_flags() != Download::default_resume_flags.");
|
||||||
|
|
||||||
// See #1292.
|
// See #1292.
|
||||||
//
|
//
|
||||||
@@ -671,7 +671,7 @@ DownloadList::confirm_finished(Download* download) {
|
|||||||
//
|
//
|
||||||
// TODO: Add a check when setting the flags to see if the torrent is
|
// TODO: Add a check when setting the flags to see if the torrent is
|
||||||
// being hashed.
|
// being hashed.
|
||||||
download->set_resume_flags(~uint32_t());
|
download->set_resume_flags(Download::default_resume_flags);
|
||||||
|
|
||||||
if (!download->is_active() && rpc::call_command_value("d.state", rpc::make_target(download)) == 1)
|
if (!download->is_active() && rpc::call_command_value("d.state", rpc::make_target(download)) == 1)
|
||||||
resume(download,
|
resume(download,
|
||||||
|
|||||||
Reference in New Issue
Block a user