Disable detached worker completions before draining jobs

This commit is contained in:
evgeny committed 2026-10-26 20:45:32 +01:00
1 parent 8f3d9edf8b
commit 781d41e003
1 file changed
+4 -3
+4 -3
View File
@@ -1,7 +1,8 @@
/* Единственный дисковый поток модуля. submit/done выполняются в uasync, work —
* в pthread. Очередь ограничена; completion резервируется до передачи работы.
* Для обязательной очистки reserve выполняется до открытия файлов. destroy вне
* собственных callbacks ждёт работ и доставляет done, включая поставленные ими cleanup jobs.
* Для обязательной очистки reserve выполняется до открытия файлов. destroy в uasync
* ждёт работ и доставляет done, включая поставленные ими cleanup jobs; допустим из внешней команды.
* Отмена completion удаляет task и из общей очереди, и из ещё не исполненной части batch uasync.
* data/arg заимствованы до done; worker освобождает только собственную оболочку работы.
* ua/work/done и worker обязательны; ua живёт до конца destroy. Останавливать worker из done нельзя. */
#ifndef MEMBER_FILES_WORKER_H
@@ -24,7 +25,7 @@ void mf_worker_submit(struct mf_worker* worker, mf_work_fn work, void* data, mf_
* После вызова резерв нельзя освобождать/использовать повторно. Work выполняется FIFO, done ровно один раз. */
void mf_worker_submit_reserved(struct mf_worker* worker, struct mf_work* reserved,
mf_work_fn work, void* data, mf_done_fn done, void* arg);
// После quiesce владельца, вне собственных callbacks: дождаться работ и cleanup continuations без остановки pthread.
// После quiesce владельца в uasync, вне собственных done: дождаться работ и cleanup continuations, не останавливая pthread.
// Не запускает uasync рекурсивно; порядок done при drain не обещается. NULL допустим.
void mf_worker_drain(struct mf_worker* worker);
/* Drain, затем join и освобождение. Работы не прерываются и получают обычный done(0); NULL допустим. */