Требует действийможет затронуть работающую системуMerge commit набора PDF-регрессий не требует отдельной записи; его framework-facing conditional изменения покрыты двумя non-merge UI commit. В payload нет superseded_by и нового графика удаления помимо переименования HASUIPDF; файлы учёта версии проигнорированы.
WebSocket без задержки пробуждается, отписка IOCP стала атомарной
Сетевые backend получили несколько конкретных исправлений конкурентности: WebSocket-кадры с нулевой задержкой будят async-сервер, уже подключённые tunnel sockets идут по правильному пути, а Windows IOCP subscription может быть захвачена для удаления только один раз. Завершена и переработка слотов TSynLog: слот не публикуется для повторного использования до очистки его битов имени во всех журналах. Пользователям UI следует проверить новый conditional HAS_UI_PDF и удаление HASUIPDF; остальные PDF-изменения в основном относятся к тестам и выбору платформы.
Коротко
- TWebSocketAsyncConnections теперь будит главный поток async-сервера при SendDelay=0 и переходе исходящей очереди из пустой в непустую.
- TWinIocp.Unsubscribe атомарно меняет указатель subscription вызывающего кода на nil, не позволяя конкурентно удалить один объект дважды.
- TTunnelLocal отличает связанный listening socket от уже подключённого socket и восстанавливает правильный путь обработки.
- TSynLog очищает биты имени потока во всех журналах до возврата номера в пул повторно используемых слотов.
- HASUIPDF заменён на HAS_UI_PDF; добавлены project controls NO_UI, NO_UI_VCL и NO_UI_PDF.
Рекомендации по обновлению
Для async WebSocket, TTunnelLocal, Windows IOCP и TSynLog с частой сменой потоков берите build 2.4.16753: она включает полные исправления payload. Пересоберите UI/PDF-проекты и замените прикладные проверки HASUIPDF на HAS_UI_PDF. NO_UI, NO_UI_VCL и NO_UI_PDF нужны лишь для исключения этих подсистем. В исходном payload нет более поздних замен этих commit в этой редакции.
12 из 12 записей · 13 коммитов в апстриме
1
Высокий
Logging-слот публикуется для повторного использования после очистки битов
TSynLog.NotifyThreadEnded в mormot.core.log сначала очищает fThreadNameLogged под SynLogGlobalLock, затем блокирует SynLogThreads.Safe и добавляет номер в IndexReleased. Индекс bitmap теперь записан как num - 1.
Исправления
mormot.core.log
68f8a3cb+16-17
core: fixed another paranoid race in TSynLog.NotifyThreadEnded
Влияние
Другой поток не успеет получить повторный номер и установить бит имени до очистки старого бита завершающимся потоком. Delphi/FPC-службы с частой сменой потоков не теряют маркер нового владельца.
Рекомендуется обновиться
Используйте build 2.4.16753, не останавливаясь на предыдущем logging-lock commit этой редакции.
Модули
2
Высокий
Windows IOCP unsubscribe атомарно захватывает указатель вызывающего кода
TWinIocp.Unsubscribe в mormot.net.sock.windows копирует subscription pointer локально, затем через LockedExc меняет var-параметр на nil, только если он ещё совпадает. Shutdown, receive и free используют захваченный локальный указатель.
Исправления
mormot.net.sock.windows
76d9d035+9-9
net: made TWinIocp.Unsubscribe atomic
Влияние
Два конкурентных вызова не могут пройти non-nil проверку и отписать или освободить один IOCP subscription. Windows async-серверы избегают двойного shutdown и возможного use-after-free.
Рекомендуется обновиться
Обновите Windows IOCP-серверы, где shutdown соединения может конкурировать с очисткой владельца.
Публичный API
TWinIocp.Unsubscribebehaviour-changed — var-указатель атомарно захватывается и очищается до начала удаления.
Модули
3
Высокий
WebSocket-кадры без задержки сразу будят async-сервер
TWebSocketAsyncConnections.NotifyOutgoing запоминает, была ли fOutgoingHandle пустой до добавления. При первом элементе и Connection.fProcess.Settings^.SendDelay = 0 вызывается новый THttpAsyncConnections.WakeupServerMainThread, сигнализирующий fExecuteEvent.
Исправления
mormot.net.async+1
a7195425+15-2
net: fixed TWebSocketAsyncConnections with SendDelay=0
Влияние
При SendDelay=0 исходящий кадр больше не ждёт постороннего socket event или idle pass до отправки главным async loop. Восстановлена ожидаемая немедленная доставка на Delphi/FPC WebSocket-серверах.
Рекомендуется обновиться
Обновите серверы с SendDelay=0 и проверьте server-originated frames при отсутствии входящего трафика.
Публичный API
TWebSocketAsyncConnections with SendDelay=0behaviour-changed — Первое исходящее соединение в очереди сразу будит цикл сервера.
4
Высокий
Подключённые локальные tunnels больше не входят в listening accept
TTunnelLocal в mormot.net.tunnel переименовывает внутренний fSocketCreated в fSocketBound и устанавливает его только после bind через NewSocket для нулевого порта. TTunnelLocalThread.DoExecute входит в accept loop лишь при этом флаге.
Исправления
mormot.net.tunnel
9cb2c9bc+5-5
net: fixed TTunnelLocal socket flag
Влияние
Tunnel, открытый подключением к существующему локальному адресу, сразу переходит в stProcessing вместо accept на подключённом socket. Bound tunnel с ephemeral port сохраняет listening-поведение.
Рекомендуется обновиться
Обновите TTunnelLocal, подключающийся к заданному ненулевому локальному порту, и проверьте оба направления tunnel.
Модули
5
Средний
UI compile controls переименованы, CountOccurrences стал публичным
mormot.defines заменяет HASUIPDF на HAS_UI_PDF и вводит HAS_UI, HAS_UI_VCL_LCL, а также switches NO_UI, NO_UI_VCL и NO_UI_PDF. mormot.core.unicode добавляет публичный CountOccurrences для неперекрывающихся RawUtf8; mormot.core.text исправляет имя параметра в UInt32DigitsToUtf8.
Несовместимые изменения
mormot.core.text+3
fe0b21d2+59-18
core: new CountOccurrences() function
Влияние
Условия приложений или packages с HASUIPDF перестают выбирать PDF-ветку до переименования. Проекты могут исключать весь UI, Delphi VCL или только PDF; CountOccurrences доступен Delphi и FPC.
Требуется миграция
Найдите HASUIPDF в исходниках, package files и build defines, замените на HAS_UI_PDF и пересоберите UI и headless targets.
Публичный API
HASUIPDFremoved — Замените проверки проекта на HAS_UI_PDF.HAS_UI / HAS_UI_VCL_LCL / HAS_UI_PDFadded — Описывают доступные UI-возможности после project-level исключений.NO_UI / NO_UI_VCL / NO_UI_PDFadded — Project switches для отключения всего UI, VCL/LCL или PDF.CountOccurrencesadded — Считает неперекрывающиеся вхождения SubStr в RawUtf8 Text.
6
Средний
Очистка bitmap имён перенесена под глобальную блокировку журнала
TSynLog.NotifyThreadEnded в mormot.core.log защищает SynLogFamily и bitmap fGlobalLog.fThreadNameLogged через SynLogGlobalLock. Существующая работа под SynLogThreads.Safe изначально вложена в эту защиту.
Исправления
mormot.core.log
6539d93d+24-19
core: fixed a paranoid race in TSynLog.NotifyThreadEnded
Влияние
Завершающийся поток больше не меняет bitmap имён параллельно с lifecycle семейства логов. Последующий 68f8a3c завершает порядок до повторного использования слота.
Рекомендуется обновиться
Берите итог редакции, чтобы блокировка была дополнена финальным порядком публикации из 68f8a3c.
Модули
7
Средний
Async-обслуживание использует единую шкалу монотонного времени
mormot.net.async записывает fLastOperationMS до возможного re-entry из ProcessWaitingWrite и обновляет после. Период callbacks без IOCP теперь берёт tix из GetTickCount64 shr 16 вместо GetTickSec shr 6, совпадая с миллисекундной логикой вокруг.
Исправления
mormot.net.async
f50a5e53+6-4
net: fixed async internal ticks computation
Влияние
Async socket maintenance избегает рекурсивной работы на одном tick и использует согласованный интервал около 65 секунд. В основном затронуты POSIX poll backend; API не меняются.
Рекомендуется обновиться
Обновите нагруженные async-серверы, особенно POSIX poll с большими queued writes или периодическими callbacks.
Модули
8
Низкий
Фиксированные hash- и temp-типы расширены до 4096 бит
mormot.core.base добавляет THash1024, THash2048 и THash4096 с pointer aliases, а также TTemp128 и TTemp256. Фиксированные массивы SHA-512, CPU sets, SSPI, ISO, DHCP и TFTP заменены эквивалентными именованными типами без изменения размера.
Новые возможности
mormot.core.base+7
487c21e6+29-21
core: new THash1024..4096 and TTemp128..512 types
Влияние
Приложения получают стандартные объявления бинарных и stack buffer размером 128, 256 и 512 байт. Layout существующих records не меняется, wire formats остаются прежними.
Публичный API
THash1024 / PHash1024 / THash2048 / PHash2048 / THash4096 / PHash4096added — Именованные byte arrays и pointer aliases для 128, 256 и 512 байт.TTemp128 / TTemp256added — Фиксированные временные буферы AnsiChar на 128 и 256 байт.
9
Низкий
Контекст исключения теперь содержит числовой слот потока
mormot.core.log форматирует обычный контекст исключения как [#номер имя], пропуская недоступные части. _GetCurrentThreadName упрощён без изменения блокировки, TDebugFile.AddLog вызывает DebugFileGet напрямую.
Новые возможности
mormot.core.log
93da31e1+24-15
core: refined exception logging entry
Влияние
Строки исключений проще сопоставлять с TSynLog, но парсеры, ожидающие в скобках только имя, стоит проверить. Обработка исключений и публичные API прежние.
Стоит взглянуть
Публичный API
TSynLog exception row formatbehaviour-changed — В обычном контексте перед необязательным именем добавлен #ThreadNumber.
Модули
10
Низкий
TMultiLightLock использует 32-битные flags и нативный идентификатор потока
mormot.core.os меняет private TMultiLightLock.Flags с PtrUInt на cardinal, а ThreadID с pointer на TThreadID. Операции используют LockedExc32 и LockedDec32, ноль заменяет nil для идентификатора.
Внутреннее устройство
mormot.core.os
aa0c8213+13-13
core: simplified TMultiLightLock
Влияние
Семантика владения и re-entrant счётчика прежняя, атомарный счётчик теперь всегда 32-битный. Пользователи работают через публичные методы, после пересборки изменений приложения не ожидается.
Модули
11
Низкий
TCachedValue всегда сохраняет результат обновления, завершившегося последним
TCachedValue.Cache в mormot.core.os удаляет условие TixShr = Tix32 перед присваиванием Value после callback. Публичные параметры только переформатированы; mormot.core.os.security уточняет, что shift 8 означает кэш на 256 секунд.
Внутреннее устройство
mormot.core.os+1
a697074f+6-7
core: minor TCachedValue.Cache change
Влияние
Если refresh callbacks разных интервалов перекрываются, сохраняется завершившийся последним результат, даже если другой вызов продвинул Tix32. API и интервалы file/certificate cache прежние.
12
Низкий
PDF-регрессии изолированы новыми именами UI-возможностей
mormot.ui.pdf и integration runner заменяют HASUIPDF на HAS_UI_PDF, mormot.defines добавляет HAS_UI_LCL для FPC. test.ui.pdf реорганизован, использует mormot.lib.z для fixture и остаётся пустым unit без PDF UI.
Тесты
mormot.defines+1
cf21f26e+202-232
ui: more refactoring of #571 test.ui.pdf process
Влияние
Тестовые сборки без UI не инициализируют VCL/LCL и не включают PDF-тесты. Runtime PDF не меняется; commit завершает переименование conditional из предыдущего изменения.
Публичный API
HAS_UI_LCLadded — Определяется для FPC при включённой UI-поддержке.