poll в Redox больше не зависает: переполнение очереди и падение при таймауте
23.07.2026Две правки устранили зависания и падения вокруг poll в Redox: переполнение размера очереди в событиях и каналах в ядре, а также аварийное завершение в самом poll при истечении таймаута.
Зависание из-за длины очереди
В ядре длина очереди в событиях и каналах вычислялась некорректно. При определённом соотношении размеров значение переполнялось, и дальнейшее поведение становилось непредсказуемым — вплоть до зависания. Именно это и проявилось: тесты os-test на базовые файловые дескрипторы и poll переставали завершаться.
Падение при таймауте
Вторая ошибка была в самом poll в relibc: когда время ожидания истекало и возвращать было нечего, функция паниковала. То есть штатная ситуация — «за указанное время событий не было» — приводила к аварийному завершению вместо возврата нуля.
Что это значит для кода на Rust
Обе ситуации бьют по типовым сценариям. Зависание poll — это работа с событиями и каналами: сокеты, очереди сообщений, межпроцессная синхронизация, асинхронные циклы событий. Падение при таймауте — это ровно то, что делает любой цикл с ограничением по времени: std::thread::sleep в сочетании с ожиданием, таймауты в сетевом коде, тесты с дедлайном.
Обе ошибки лечатся обновлением, но на практике их проявление выглядит как ошибка в прикладном коде, и это уводит поиск не туда.
Оригинал
Коммиты Fix poll hang in os-test basic/poll от 23 июля в redox-os/kernel и Fix crash at poll() when timed out от 19 июля в redox-os/relibc
Упоминаний: 1 · Просмотров: 3