diff --git a/tools/server/server-models.cpp b/tools/server/server-models.cpp index 2e40c615e5..00a3bcfe44 100644 --- a/tools/server/server-models.cpp +++ b/tools/server/server-models.cpp @@ -1398,21 +1398,9 @@ bool server_models::remove(const std::string & name) { return true; } - // on the cancelled-download path the status flips to DOWNLOADED while the - // monitoring thread still has a mutex-guarded step left, so joining under - // the lock would deadlock - join outside, as load_models() does - std::thread th = std::move(it->second.th); - mapping.erase(name); - lk.unlock(); - - // join first so the monitoring thread's final mutex-guarded cleanup cannot - // race the disk removal, then remove from disk without holding the lock - // (best-effort: cancelled downloads may have no cached files) - if (th.joinable()) { - th.join(); - } - + // remove from disk (best-effort: cancelled downloads may have no cached files) bool ok = common_download_remove(name); + mapping.erase(name); if (!ok) { SRV_WRN("removing model name=%s from disk returned false (no cached files?)\n", name.c_str());