mORMot2 DailyЕжедневный обзор коммитов апстрима

Устранён 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.

Сборка2.4.16897 → 2.4.16922
Коммиты26
Строки+893 -326
Чтение6 мин

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.

Модули

Sven Harazim · 17:37 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 09:52 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 14:00 UTC · открыть коммит на GitHub →

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.

Модули

Arnaud Bouchez · 10:59 UTC · открыть коммит на GitHub →

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.

Публичный API

  • TNetTlsContext.CipherSuitesadded — Имена suites TLS 1.3 через двоеточие, передаваемые SSL_CTX_set_ciphersuites; SChannel их не использует.

Arnaud Bouchez · 13:12 UTC · открыть коммит на GitHub →

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.

Модули

Arnaud Bouchez · 12:22 UTC · открыть коммит на GitHub →

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 не изменены.

Публичный API

  • Currency results through mormot.core.interfacesbehaviour-changed — FPC POSIX x86-64 читает imvCurrency из x87 ST0; другие цели сохраняют нативную convention.

Arnaud Bouchez · 10:13 UTC · открыть коммит на GitHub →

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.

Публичный API

  • THttpRequestContext.Resetbehaviour-changed — Reset теперь очищает AcceptEncoding между запросами.

Модули

Arnaud Bouchez · 11:45 UTC · открыть коммит на GitHub →

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.

Модули

Arnaud Bouchez · 14:56 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 11:16 UTC · открыть коммит на GitHub →

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 нет.

Arnaud Bouchez · 14:16 UTC · открыть коммит на GitHub →

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. Иное поведение приложений не меняется; вторая часть лишь исправляет генерацию тестовых данных.

Модули

Arnaud Bouchez · 11:26 UTC · открыть коммит на GitHub →

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 при очистке или последующей обработке.

Модули

Thomas Prud'homme · 08:55 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 14:53 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 15:08 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 13:11 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 11:45 UTC · открыть коммит на GitHub →

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 сохраняют прежние пути.

Arnaud Bouchez · 07:40 UTC · открыть коммит на GitHub →

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, если он доступен.

Arnaud Bouchez · 14:56 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 12:14 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 08:45 UTC · открыть коммит на GitHub →

22 Низкий Научная нотация добавлена в матрицу regression x86-64 чисел Numeric tests теперь передают вывод DoubleToString через GetExtended и GetNumericVariantFromJson и добавляют положительные и отрицательные одно- и двузначные мантиссы с экспонентами. Тесты 5f5bd051+25-4

tests: enhanced x64 asm numbers coverage

Влияние

Поведение приложений не меняется. Новые assertions защищают короткие assembly-пути научной нотации от regression значения и конечного указателя.

Arnaud Bouchez · 07:41 UTC · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13