diff --git a/doc/tasks.md b/doc/tasks.md index 1b8e51f3..26bba727 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -120,8 +120,10 @@ [ ] **media_delivery progress_cb: отмена освобождает dl внутри обработчика DONE** — подтверждено ASAN 22.10.2026: progress_cb вызывает media_download_cancel, md_dl_finish освобождает dl; media_download_handle_done затем вызывает md_dl_send_have_block с освобождённым указателем. ASAN heap-use-after-free, чтение 8 байт. - Уведомление должно быть последним обращением обработчика к внешнему коду; финализация имеет собственный - отменяемый шаг, done вызывается ровно один раз после снятия timers/CM/relay/waiters и удаления из индекса. + Обработчик явно удерживает контекст. Terminal снимает загрузку с индекса и отменяет её timers/CM/waiters; + освобождение и done выполняются после выхода последнего удерживающего обработчика, ровно один раз. + После progress проверяется terminal: отменённая загрузка не продолжает финализацию. Один перенос callback + в конец функции/отложенный финализатор не заменяет владение. Relay-получатели отдельно удерживают файл блока. Проверить также отмену с повторным start того же media_id, отмену на последнем progress и поздние пакеты. Лог /tmp/media-block-audit-cancel-asan.log; стенд вне репозитория /tmp/media-block-audit.c.