Требует действийможет затронуть работающую системуИсходный payload содержит четыре merge commits и 22 non-merge commit; ниже покрыт каждый non-merge commit. В нём нет маркеров superseded_by и уведомлений о deprecation. Три исключаемых окна основаны на явных исправлениях или завершениях позднее в той же встроенной последовательности builds.
Устранён deadlock запуска логов, стабилизированы TLS 1.3 и POSIX
При ошибке создания файла лог мог рекурсивно записываться через неинициализированный writer и оставлять SynLogGlobalLock захваченным, блокируя все последующие logging threads. Выпуск также завершает настройку cipher suites TLS 1.3, исправляет возврат Currency через interface dispatch в FPC POSIX и устраняет busy loop на /dev/null под systemd. POSIX-код, напрямую вызывающий WaitReadPending, должен учесть новый integer-результат, а пользователям низкоуровневого x86-64 numeric parser следует проверить переименованные SSSE3 entry points.
Коротко
- Переходите на build 2.4.16922 в cdb7dad52a6989d41ce8405a15d26928e0829ca2; она включает финальные исправления логов и завершения Linux.
- TSynLog больше не блокирует все logging threads при ошибке создания файла с включённым exception logging.
- Backends OpenSSL теперь настраивают TLS 1.3 через TNetTlsContext.CipherSuites и SSL_CTX_set_ciphersuites.
- Interface dispatch FPC POSIX теперь возвращает Currency через x87 FP0, а не обрабатывает его как binary64-результат.
- WaitReadPending теперь возвращает -1, 0 или 1 в POSIX; прямые вызовы должны заменить boolean-проверку явным сравнением.
- Повторно используемые THttpRequestContext теперь очищают AcceptEncoding, не перенося предпочтения сжатия в следующий запрос.
Рекомендации по обновлению
Берите build 2.4.16922 на текущем head. Пропустите build 2.4.16907: исправление ширины allocator ещё не содержит nil guard из 16908; пропустите 2.4.16913: zoned log parsing исправлен в 16914; не останавливайтесь на 2.4.16915: binding TLS 1.3 подключён к TOpenSslNetTls только в 16916. Пересоберите каждую цель Delphi/FPC и проверьте ошибку создания логов, возврат Currency через interface, negotiation TLS 1.3, завершение под systemd и повторное использование HTTP request context.
22 из 22 записей · 26 коммитов в апстриме
1
Критический
Ошибка создания log file больше не блокирует все logging threads
TSynLog.LogFileInit сохраняет flags текущего thread info, устанавливает tiExceptionIgnore, пока fWriter не готов, и восстанавливает flags в finally. Это предотвращает рекурсивный logging ошибки CreateLogWriter в тот же экземпляр до освобождения SynLogGlobalLock.
Исправления
mormot.core.log
0165307d+39-0
core: fixed TSynLog deadlock when the log file can't be created
Влияние
При ptIdentifiedInOneFile и включённом exception logging недоступный или отсутствующий путь лога больше не вызывает access violation до unlock и не блокирует все остальные threads на первом вызове log.
Рекомендуется обновиться
Обновите logging deployments до build 2.4.16922 и проверьте запуск с намеренно недоступным для записи каталогом, пока несколько threads отправляют первые сообщения.
Модули
2
Высокий
Numeric parsers переведены за выбираемые entry points Pascal и SSSE3
GetExtended теперь dispatch-ится через GetExtendedStub и выбирает GetExtendedSsse3 на подходящих ASMX64NOTPIC целях, а GetNumericVariantFromJson идёт через GetNumericVariantStub и по умолчанию использует GetNumericVariantPas. Прежние низкоуровневые assembly symbols из mormot.core.base переименованы с суффиксом Ssse3.
Несовместимые изменения
mormot.core.base+3
acc10bf5+62-21
core: define GetExtended/GetNumericVariantFromJson as stubs
Влияние
Обычные вызовы mormot.core.text.GetExtended и mormot.core.variants.GetNumericVariantFromJson сохраняют signatures. Код, напрямую называющий условные assembly declarations в mormot.core.base, перестанет компилироваться до перехода на новые Ssse3 symbols или публичные wrappers.
Требуется миграция
Найдите квалифицированные вызовы mormot.core.base.GetExtended и mormot.core.base.GetNumericVariantFromJson; используйте wrappers из mormot.core.text и mormot.core.variants либо новые имена Ssse3, если прямое управление SIMD намеренно.
Публичный API
mormot.core.base.GetExtendedrenamed — Условный x86-64 assembly entry point теперь называется GetExtendedSsse3; обычный wrapper mormot.core.text.GetExtended сохранён.mormot.core.base.GetNumericVariantFromJsonrenamed — Условный x86-64 assembly entry point теперь называется GetNumericVariantSsse3; wrapper из mormot.core.variants сохранён.TGetExtended / GetExtendedStubadded — Публичный function type и dispatch variable для выбора GetExtendedPas или GetExtendedSsse3.TGetNumericVariantFromJson / GetNumericVariantStubadded — Публичный function type и dispatch variable, по умолчанию указывающий на GetNumericVariantPas.
3
Высокий
stdin systemd больше не загружает ConsoleWaitForEnterKey на 100% CPU
POSIX WaitReadPending меняет boolean на integer и возвращает 1 для читаемого ввода, 0 для timeout и -1 для HUP, ERR или NVAL. ConsoleWaitForEnterKey после неверного poll или EOF ждёт, а не сразу повторяет работу с systemd /dev/null.
Несовместимые изменения
mormot.core.os+1
c2f8bb0f+27-11
core: fixed ConsoleWaitForEnterKey() when run under systemd
Влияние
POSIX-сервисы с ConsoleWaitForEnterKey под systemd больше не загружают CPU core при stdin=/dev/null. Для прямых внешних вызовов WaitReadPending тип результата source-breaking и требует явного сравнения.
Требуется миграция
Найдите вызовы WaitReadPending в POSIX-коде; используйте > 0 для читаемого ввода, = 0 для timeout и < 0 для HUP, ERR или NVAL. Развёртывайте полную последовательность завершения 2.4.16922.
Публичный API
WaitReadPendingsignature-changed — POSIX-only результат меняется с boolean на integer со значениями -1, 0 и 1.
4
Высокий
Binding лимита стека QuickJS теперь принимает runtime
Публичная Pascal declaration JS_SetMaxStackSize меняет первый параметр с JSContext на JSRuntime в соответствии с C API QuickJS. Внешний symbol и convention cdecl не меняются.
Несовместимые изменения
mormot.lib.quickjs
37fa86b4+3-4
lib: fixed JS_SetMaxStackSize() definition
Влияние
Код, передававший JSContext, использовал неверный opaque object и теперь должен передавать его JSRuntime. Поскольку pointer types различаются, typed Pascal call sites должны выявить несоответствие при компиляции.
Требуется миграция
Найдите вызовы JS_SetMaxStackSize и замените аргумент JSContext на владеющий JSRuntime перед пересборкой интеграций QuickJS.
Публичный API
JS_SetMaxStackSizesignature-changed — Первый параметр теперь JSRuntime вместо JSContext.
Модули
5
Высокий
TLS 1.3 получил отдельный настраиваемый список cipher suites
TNetTlsContext получает CipherSuites для TLS 1.3. TOpenSslNetTls.SetupCtx задаёт default с учётом AES acceleration, вызывает SSL_CTX_set_ciphersuites, если не задан DisableTls13, и включает server cipher preference с опцией приоритета ChaCha OpenSSL согласно конфигурации.
Исправления
mormot.lib.openssl11+1
7eb6b9e5+35-7
net: proper TLS 1.3 support
Влияние
Servers и clients OpenSSL теперь могут управлять suites TLS 1.3 отдельно от CipherList для старых протоколов. Политика только с CipherList больше не означает те же имена для TLS 1.3, поэтому строгим deployments следует явно задать и проверить CipherSuites.
Рекомендуется обновиться
Обновитесь до build 2.4.16916 или новее, задайте TNetTlsContext.CipherSuites при явной политике и отдельно проверьте handshakes TLS 1.2 и TLS 1.3.
Публичный API
TNetTlsContext.CipherSuitesadded — Имена suites TLS 1.3 через двоеточие, передаваемые SSL_CTX_set_ciphersuites; SChannel их не использует.
6
Высокий
Идентификатор thread на Z больше не делает parsed log file пустым
TSynLogFile теперь проверяет LineBeg[fLineLevelOffset - 2] как маркер zoned timestamp вместо более позднего байта, который может принадлежать номеру thread в кодировке Int18ToText. Regression test покрывает thread 58 с ZonedTimestamp и без него.
Исправления
mormot.core.log
29b5fb26+38-3
core: fixed TSynLogFile zone layout
Влияние
Log readers больше не принимают байт Z обычного thread id за маркер timezone, не смещают level offset и не загружают файл с нулём parsed events.
Рекомендуется обновиться
Для log viewers используйте build 2.4.16914 или новее и повторите parsing без ZonedTimestamp с большими идентификаторами thread.
Модули
7
Высокий
Interface calls FPC POSIX возвращают Currency из правильного регистра
Assembly dispatch в mormot.core.interfaces больше не группирует imvCurrency с floating-point результатами Double и DateTime. На FPC x86-64 SysV Currency теперь извлекается из x87 ST0 в TCallMethodArgs.res64; другие ABI сохраняют путь integer return register.
Исправления
mormot.core.interfaces
6a27c07f+9-7
core: fixed currency result in mormot.core.interfaces
Влияние
Backends, вызывающие interface methods через этот dispatcher в FPC POSIX, теперь получают ожидаемое значение Currency вместо чтения по неверной result convention. Пути Delphi и non-POSIX не изменены.
Рекомендуется обновиться
Обновите сервисы FPC POSIX, возвращающие Currency через mormot.core.interfaces, и добавьте проверку точного значения для каждого поддерживаемого CPU ABI.
Публичный API
Currency results through mormot.core.interfacesbehaviour-changed — FPC POSIX x86-64 читает imvCurrency из x87 ST0; другие цели сохраняют нативную convention.
Модули
8
Высокий
Повторно используемые HTTP request contexts больше не сохраняют Accept-Encoding
THttpRequestContext.Reset теперь очищает AcceptEncoding через FastAssignNew вместе с UserAgent, Referer и другими строками запроса. Состояние сжатия затем вычисляется по следующему запросу, а не по сохранённому header value.
Исправления
mormot.net.http
4c990d65+4-2
net: fixed Accept-Encoding issue
Влияние
На persistent connections и pooled contexts запрос без Accept-Encoding больше не наследует предпочтение сжатия предыдущего запроса. Это предотвращает negotiation кодирования ответа по устаревшим возможностям client.
Рекомендуется обновиться
Обновите HTTP servers, повторно использующие THttpRequestContext, и проверьте последовательные запросы с Accept-Encoding и без него на одном соединении.
Публичный API
THttpRequestContext.Resetbehaviour-changed — Reset теперь очищает AcceptEncoding между запросами.
Модули
9
Высокий
DoubleToAscii инициализирует флаг генерации дробной части
DoubleToAscii обнуляет локальную переменную fl до генерации дробных цифр. Раньше в этом месте инициализировалась только CPU32-specific sticky variable, а fl зависела от неинициализированного содержимого stack.
Исправления
mormot.core.text
45ff2b23+3-2
core: fixed uninitialized flag in DoubleToAscii()
Влияние
Текстовое форматирование floating-point больше не позволяет неинициализированному флагу влиять на путь дробных цифр. Это затрагивает backends Delphi и FPC с данной Pascal-реализацией, включая JSON и текстовую serialization на DoubleToAscii.
Рекомендуется обновиться
Обновите workloads numeric serialization и повторите детерминированные тесты DoubleToAscii и JSON round-trip на каждом compiler и CPU target.
Модули
10
Средний
Allocation wrappers статических библиотек используют pointer-sized длины
Wrappers pas_malloc, pas_realloc и pas_malloc_usable_size для QuickJS и статических библиотек переходят с 32-битных integer/cardinal размеров на совместимые с size_t типы PtrUInt. pas_calloc также отклоняет overflow n × size до AllocMem.
Исправления
mormot.lib.quickjs+1
66d7d51c+31-28
lib: fixed pas_malloc() wrapper definition
Влияние
Статические bindings FPC и Delphi теперь соответствуют нативному ABI size_t на 64-битных целях и отклоняют переполненные размеры calloc. Build 16907 не следует использовать отдельно: nil guard для FPC usable-size wrapper добавлен в 16908.
Рекомендуется обновиться
Берите изменение вместе с build 2.4.16908 и повторите allocation tests QuickJS и статического сжатия на 64-битных Delphi и FPC.
11
Средний
Завершение консоли избегает лишних ожиданий после termination
ConsoleWaitForEnterKey теперь проверяет SynDaemonTerminated перед ожиданием после ошибки poll, перед чтением stdin и после EOF. Изменение OpenSSL в том же commit лишь уточняет комментарий SSL_OP_PRIORITIZE_CHACHA.
Исправления
mormot.core.os.posix+1
be7dfd60+20-16
core: tuned ConsoleWaitForEnterKey() shutdown
Влияние
Консольные POSIX-процессы могут быстро выйти из fallback loop /dev/null после записи сигнала termination. Других изменений публичного API сверх предыдущей signature WaitReadPending нет.
Рекомендуется обновиться
Берите изменение в составе полной последовательности Linux shutdown 2.4.16922, не останавливаясь на начальном исправлении CPU под systemd.
12
Средний
Поиск размера allocator обрабатывает nil, numeric benchmarks исправлены
pas_malloc_usable_size теперь вызывает FPC MemSize только для ненулевого pointer и иначе возвращает ноль, как ожидает fallback QuickJS. Numeric benchmark также перестаёт дописывать ноль после экспоненциальных форм благодаря правильной проверке класса входа.
Исправления
mormot.lib.static
c54910c3+9-8
test: fixed number benchmark values generation
Влияние
Allocation-код QuickJS под FPC может запросить неизвестный nil allocation, не передавая nil в MemSize. Иное поведение приложений не меняется; вторая часть лишь исправляет генерацию тестовых данных.
Рекомендуется обновиться
Используйте build 2.4.16908 или новее, не останавливаясь на предыдущем commit allocator wrappers.
Модули
13
Средний
Прерванный LDAP-поиск освобождает состояние range перед возвратом
TLdapClient.SearchAllDocRaw теперь освобождает fSearchRange при обнаружении fAborted после очистки флага и до возврата false, не оставляя объект paging range живым на пути прерывания.
Исправления
mormot.net.ldap
7fdb36cb+2-0
ldap - Fix exception if searchalldocraw aborted
Влияние
LDAP clients, прерывающие SearchAllDocRaw во время ranged-attribute retrieval, больше не сохраняют устаревшее range-состояние, способное вызвать exception при очистке или последующей обработке.
Рекомендуется обновиться
Обновитесь, если LDAP-поиск использует SearchAllAbort или ranged attributes, затем проверьте прерывание и немедленное повторное использование client.
Модули
14
Средний
Сигналы termination POSIX будят Linux futex waiters
После присваивания SynDaemonTerminated функция SynDaemonSignal вызывает OsWakeAllOnValue, если она доступна. Документация публичной переменной теперь показывает ожидание её адреса через OsWaitOnValue в Linux.
Новые возможности
mormot.core.os+1
7000cacc+7-2
core: SynDaemonTerminated can be notified by Linux futex
Влияние
Linux threads, заблокированные на значении termination, могут проснуться сразу при SIGQUIT, SIGTERM или SIGINT вместо ожидания polling interval. Другие POSIX-цели сохраняют прежнее поведение.
Публичный API
SynDaemonTerminatedbehaviour-changed — Присваивание из signal handler теперь будит OsWaitOnValue waiters в Linux.
15
Средний
Ожидание консоли использует futex завершения daemon
Новый внутренний helper WaitForDaemonTermination ждёт SynDaemonTerminated до секунды через OsWaitOnValue, если он доступен, иначе спит. ConsoleWaitForEnterKey использует его после ошибок poll и EOF, а документация предупреждает, что прямое присваивание также должно будить waiters.
Производительность
mormot.core.os+1
7e0e8d16+28-18
core: ConsoleWaitForEnterKey() use our shutdown futex
Влияние
Консольные сервисы Linux реагируют на завершение daemon без цикла только на sleep и по-прежнему избегают CPU spin systemd /dev/null. Код, вручную присваивающий SynDaemonTerminated, должен выполнять документированное требование wake.
Рекомендуется обновиться
Разверните полную последовательность build 2.4.16922 и проверьте прямые присваивания SynDaemonTerminated на вызов OsWakeAllOnValue согласно документации.
16
Низкий
Loader OpenSSL предоставляет функцию cipher suites TLS 1.3
mormot.lib.openssl11 добавляет SSL_CTX_set_ciphersuites в прямой и динамический API, загружает symbol как optional и возвращает успех, если OpenSSL 1.1.0 его не имеет. Алиасы опций DTLS дополнены до SSL_OP_NO_DTLSv1_3.
Новые возможности
mormot.lib.openssl11
02bcae4a+53-32
lib: SSL_CTX_set_ciphersuites() support
Влияние
Binding может настраивать suites TLS 1.3 в версиях OpenSSL, экспортирующих функцию, не нарушая загрузку старых 1.1.0. TOpenSslNetTls вызывает её только в следующей build.
Публичный API
SSL_CTX_set_ciphersuitesadded — Optional binding OpenSSL для списка cipher suites TLS 1.3.
Модули
17
Низкий
Build switch может принудительно включить SSSE3 parsing JSON-чисел
Если заданы FORCE_SSSE3_JSON и ASMX64NOTPIC и доступен cpuSSSE3, инициализация назначает GetNumericVariantStub на GetNumericVariantSsse3. Без conditional stub продолжает использовать GetNumericVariantPas, который быстрее в текущих тестах обычного JSON.
Новые возможности
mormot.core.base.asmx64+1
e1036ba5+23-16
core: new FORCE_SSSE3_JSON conditional
Влияние
Поведение Delphi/FPC по умолчанию не меняется. Команды могут включить SSSE3 JSON parser при сборке под свою нагрузку, но commit не заявляет универсального выигрыша.
Стоит взглянуть
Включайте FORCE_SSSE3_JSON только после benchmark репрезентативных длин JSON-чисел на каждой x86-64 compiler target.
18
Низкий
Короткие числа с экспонентой обходят общий путь reduction SSSE3
x86-64 реализации GetExtended и GetNumericVariantFromJson добавляют прямые пути преобразования для одно- и двузначных integers, включая формы 1E2 и 10E2, до общего SIMD reduction-кода.
Производительность
mormot.core.base.asmx64
d6709b01+76-45
core: direct 1/2 digit xEy xxEy patterns for x64 SSSE3 asm
Влияние
Обычные короткие numeric tokens требуют меньше assembly-шагов на x86-64 с SSSE3. Публичные signatures и parsed values не изменены, прочие backends Delphi/FPC сохраняют прежние пути.
Модули
19
Низкий
Workers Linux daemon блокируются на termination вместо polling
RunUntilSigTerminated сохраняет polling CheckSynchronize в main thread, но неосновной thread FPC Linux теперь бесконечно ждёт через OsWaitOnValue при наличии futex. Другие пути сохраняют sleep loop 100 мс.
Производительность
mormot.core.os.posix
9247be3c+10-5
core: RunUntilSigTerminated() use an INFINITE futex on Linux
Влияние
Daemon с этим циклом в worker thread больше не делает периодических пробуждений и освобождается wake из signal handler, добавленным ранее. Поведение синхронизации main thread и non-Linux backends не изменено.
Публичный API
RunUntilSigTerminatedbehaviour-changed — Неосновные callers FPC Linux используют бесконечный futex wait, если он доступен.
Модули
20
Низкий
Mapped-text и log readers используют один локальный указатель строки
TMemoryMapText.GetLine, GetString, LineContains, LineSize и LineSizeSmallerThan сохраняют fLines[aIndex] в локальный pointer до вычисления границ. TSynLogFile применяет тот же шаблон, упрощает расчёт длины GetEventText и расширяет тесты mapped lines.
Внутреннее устройство
mormot.core.buffers+2
d73cd49e+55-35
core: refactored TSynLogFile/TMemoryMapText
Влияние
Публичные signatures методов не изменены. Приложения Delphi/FPC видят только внутреннюю очистку чтения строк, но должны взять и следующую build, поскольку zoned-layout detection исправлена в 2.4.16914.
21
Низкий
Numeric benchmarks охватывают больше форм tokens и оба parser API
TTestCoreBase расширяет generated inputs от обычных дробей до коротких integers, длинных дробей и экспоненциальных форм, затем измеряет и сверяет GetExtended и GetNumericVariantFromJson. Изменения assembly исправляют только комментарии.
Тесты
mormot.core.base.asmx64
3b77a2fe+96-42
tests: enhance performance tests
Влияние
Поведение backend и публичный API не меняются. Расширенный performance harness даёт больше данных для будущего выбора и оптимизации parser.
Модули
22
Низкий
Научная нотация добавлена в матрицу regression x86-64 чисел
Numeric tests теперь передают вывод DoubleToString через GetExtended и GetNumericVariantFromJson и добавляют положительные и отрицательные одно- и двузначные мантиссы с экспонентами.
Тесты
5f5bd051+25-4
tests: enhanced x64 asm numbers coverage
Влияние
Поведение приложений не меняется. Новые assertions защищают короткие assembly-пути научной нотации от regression значения и конечного указателя.