From 59cd45638615de784e7b709952f3c289e757c6d8 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 27 Oct 2026 19:43:45 +0100 Subject: [PATCH] Allow cancellation of an empty file operation as a no-op --- tools/chatgui/transport/gui_bridge.h | 2 +- tools/chatgui/transport/gui_bridge_impl.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/chatgui/transport/gui_bridge.h b/tools/chatgui/transport/gui_bridge.h index eaeb1dfd..54af448a 100644 --- a/tools/chatgui/transport/gui_bridge.h +++ b/tools/chatgui/transport/gui_bridge.h @@ -292,7 +292,7 @@ struct mf_transfer_request; * Нужны gui_bridge_init и опубликованное работающее ядро; UI callbacks всегда через очередь Qt. */ int gui_bridge_member_files_request(uint64_t group, uint64_t server, const struct mf_message* message); int gui_bridge_member_files_transfer(const struct mf_transfer_request* request); -/* Запросить отмену ненулевого ID у текущего ядра; 0 — принято, -1 — отказ с логом. +/* Запросить отмену ID у текущего ядра; id=0 ничего не делает. 0 — принято/no-op, -1 — отказ с логом. * Память команды принадлежит мосту. Итог операции приходит по её RESPONSE/TRANSFER, отдельного ответа cancel нет. */ int gui_bridge_member_files_cancel(uint64_t id); void gui_bridge_set_avatar_result_cb(gui_dm_messages_fn cb); diff --git a/tools/chatgui/transport/gui_bridge_impl.cpp b/tools/chatgui/transport/gui_bridge_impl.cpp index d9f47d28..672a1399 100644 --- a/tools/chatgui/transport/gui_bridge_impl.cpp +++ b/tools/chatgui/transport/gui_bridge_impl.cpp @@ -829,8 +829,9 @@ int gui_bridge_member_files_transfer(const struct mf_transfer_request* source) { /* После исполнения отменяет native handle; при detach до исполнения payload просто освобождается. */ int gui_bridge_member_files_cancel(uint64_t id) { + if (!id) return 0; std::lock_guard guard(bridge_mutex); - if (!id || !g_inst || !g_ua || !uasync_is_running(g_ua)) { + if (!g_inst || !g_ua || !uasync_is_running(g_ua)) { DEBUG_WARN(DEBUG_CATEGORY_MEDIA, "file bridge: cancel rejected id=%llu core_available=%d", (unsigned long long)id, g_inst && g_ua && uasync_is_running(g_ua)); return -1; }