Обновление от 14.10.2026
Стабильность сетевого слоя
- Исправлен краш сервера авторизации и игрового сервера в сборках под BSD и macOS. В kqueue готовность сокета к чтению и к записи приходит двумя отдельными событиями, поэтому в одном пакете событий мог оказаться и обработчик чтения, закрывший соединение, и следом обработчик записи для уже освобождённого сокета. Итог — падение по SIGSEGV в цикле событий. Проблема воспроизводилась на macOS каждый раз, когда таймер максимальной длительности сессии закрывал соединение. Теперь цикл событий запоминает обрабатываемый пакет событий для своего потока, а деструктор сокета удаляет сокет из остатка этого пакета, поэтому лишние события пропускаются. Сборки под Linux не затронуты: epoll сообщает оба направления готовности одним событием.
Таймеры
- Исправлены чтение за границей контейнера и потеря таймеров в планировщике системных таймеров под Unix. Планировщик сравнивал новый таймер с элементом за концом очереди и разыменовывал этот итератор; AddressSanitizer фиксировал переполнение контейнера, как только планировался второй таймер при уже ожидающем первом. Сравнение переведено на последний элемент очереди, а таймер с тем же временем срабатывания теперь добавляется в очередь вместо того, чтобы потеряться при поиске места вставки.
Резюме
Влито 2 upstream-коммита. Оба направления относятся к стабильности ядра: сетевой цикл событий под BSD/macOS и планировщик таймеров под Unix. Логика игры, контент и данные не менялись.