Clarify ownership requirements for media completion callbacks

This commit is contained in:
evgeny committed 2026-10-22 18:57:48 +02:00
1 parent 108dfae82b
commit 55d2f437a0
1 file changed
+4 -2
+4 -2
View File
@@ -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.