diff --git a/src/command_local.cc b/src/command_local.cc index 4e2befd4..f81fbace 100644 --- a/src/command_local.cc +++ b/src/command_local.cc @@ -165,6 +165,8 @@ initialize_command_local() { ADD_COMMAND_VOID("system.hostname", rak::ptr_fun(&system_hostname)); ADD_COMMAND_VOID("system.pid", rak::ptr_fun(&getpid)); + rpc::commands.call("system.method.insert", rpc::create_object_list("system.file_allocate", "value", (int64_t)0)); + ADD_COMMAND_VOID("system.file_status_cache.size", rak::make_mem_fun((utils::FileStatusCache::base_type*)control->core()->file_status_cache(), &utils::FileStatusCache::size)); ADD_COMMAND_VOID("system.file_status_cache.prune", rak::make_mem_fun(control->core()->file_status_cache(), &utils::FileStatusCache::prune)); diff --git a/src/core/download_list.cc b/src/core/download_list.cc index dff39f07..7272397b 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -215,7 +215,12 @@ DownloadList::open_throw(Download* download) { if (download->download()->is_open()) return; - download->download()->open(download->resume_flags()); + int openFlags = download->resume_flags(); + + if (rpc::call_command_value("system.file_allocate")) + openFlags |= torrent::Download::open_enable_fallocate; + + download->download()->open(openFlags); rpc::commands.call_catch("event.download.opened", rpc::make_target(download), torrent::Object(), "Download event action failed: "); }