From bc8d0da70ffadc11a646b60091daf903a2474225 Mon Sep 17 00:00:00 2001 From: trim21 Date: Thu, 4 Jun 2026 09:30:19 +0800 Subject: [PATCH] set d.message on hash check failure Use Download::hash_error_message() to get a descriptive error string when hash check fails due to I/O error, instead of relying on errno which could be zero. Also fix Manager::receive_hashing_changed() where set_hash_failed(true) was called without setting d.message when catching local_error during hash check (e.g. 'too many open files'). --- src/core/download_list.cc | 6 +++++- src/core/manager.cc | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/download_list.cc b/src/core/download_list.cc index 76dbdb65..d208fdf6 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -492,7 +492,11 @@ DownloadList::hash_done(Download* download) { if (!download->is_hash_checked()) { download->set_hash_failed(true); - + + auto& msg = download->download()->hash_error_message(); + if (!msg.empty()) + download->set_message(msg); + DL_TRIGGER_EVENT(download, "event.download.hash_failed"); return; } diff --git a/src/core/manager.cc b/src/core/manager.cc index 66d5dddb..ae853a02 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -513,6 +513,7 @@ Manager::receive_hashing_changed() { } else { (*itr)->set_hash_failed(true); + (*itr)->set_message("Hashing failed: " + std::string(e.what())); lt_log_print(torrent::LOG_TORRENT_ERROR, "Hashing failed: %s", e.what()); } }