Обработка ошибок в sem_wait и shmget: в relibc заработал потоковый модуль Python
05.06.2026В relibc исправлена обработка ошибок в sem_trywait, sem_clockwait и sem_wait. Из-за ошибок в ней не работал потоковый модуль Python; заодно добавлена проверка переполнения размера в shmget.
Что было не так
Семафор — это примитив синхронизации со счётчиком: поток может либо уменьшить счётчик и продолжить, либо уснуть до освобождения. Функции семейства sem_* сообщают о результате через код возврата, и этот код должен разбираться правильно.
Ошибка в разборе кода возврата ломала не тонкий случай, а самый обычный: потоки в Python использовали семафоры для блокировок, и модуль потоков оказывался нерабочим на Redox. Признак — исключение при работе с потоками, а не при сборке.
Что ещё поправили в том же духе
В shmget добавлена проверка переполнения размера. Размер разделяемого сегмента — это число, которое складывается из длины и флага; если переноса не проверяли, при неудачных значениях можно было получить не тот размер, который запросили. Теперь на переполнение возвращается EINVAL.
Почему это важно за пределами Redox
Код, который работает с семафорами и разделяемой памятью через libc, на Redox встречается часто — это ровно то, на чём держатся потоки и межпроцессное взаимодействие. Ошибки обработки здесь проявляются как «программа падает при многопоточности», и поиск уводит в сторону приложения, а не в libc.
Оригинал
Коммиты Fix sem_trywait and sem_wait error handling от 5 июня и fix: shmget: return EINVAL on size overflow от 8 июня 2026 года в репозитории redox-os/relibc
Упоминаний: 1 · Просмотров: 3