когда тред завершается, не знаю, как корректно его уничтожать — референс каунт не доходит до нуля, потому что в шедулере висит реф на стеке треда + ещё один на том же стеке в обработчике сискола exit_thread, который уже завершился (плюс в некоторых других местах типа Waker, если тред был убит, когда ожидал чего-то). Как можно бороться с таким или где лучше подсмотреть?
А зачем у тебя там референс каунты?
ты можешь в реализации завершающего сискола или просто деструктора треда сначала уничтожить все стеки, потом форсировать уменьшение счетчика ссылок до нуля
если у тебя прям Arc то это делается методом into_raw
И тогда если в каком-то Waker останется референс на него (или тред выйдет прям в момент, когда Waker пытается его разбудить), то получится UB, потому что Arc в вейкере будет показывать на уже несуществующую память
перед уничтожением стеков разумеется надо грохнуть все вейкеры
вейкеры надо грохать вместе с тредом
Обсуждают сегодня