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

Async OpenSSL handshakes корректно повторяются, а TSynLog сокращает write lock

Неблокирующие клиенты и серверы на OpenSSL теперь повторяют SSL_connect и SSL_accept после WANT_READ или WANT_WRITE вместо fatal error. Финальный commit сохраняет первый результат SSL_get_error, чтобы реальный сбой handshake сообщал правильную причину. TSynLog также выносит сбор stack trace и system information за пределы writer lock, уменьшая contention ценой большего per-thread state и ограниченных suffixes.

Коротко

  • Переходите на build 2.4.17024 в 13c7b4dd94b23c25d51e5b0ab9b6e207cb039207.
  • OpenSSL TLS handshakes на async sockets теперь повторяют WANT_READ и WANT_WRITE до пяти секунд.
  • Избегайте builds 2.4.17020–2.4.17023: новый retry loop повторно вызывает SSL_get_error при финальной ошибке; 2.4.17024 передаёт сохранённый код.
  • TSynLog предварительно формирует настроенные stack traces и system information до захвата per-writer lock.
  • Thread record TSynLog растёт на 320 bytes; stack-trace suffix ограничен 255 bytes, system-information suffix — 63.
  • AppendSysInfo — новый публичный helper, добавляющий system information без очистки существующей ShortString.

Рекомендации по обновлению

Переходите на build 2.4.17024. Проекты OpenSSL с неблокирующими sockets должны проверить client SSL_connect и server SSL_accept при WANT_READ, WANT_WRITE, timeout и ошибке сертификата. Не оставайтесь на 2.4.17020–2.4.17023: финальный error report retry path неполон. При LevelStackTrace или LevelSysInfo сравните suffixes и учтите дополнительные 320 thread-local bytes на logging thread.

Сборка2.4.17019 → 2.4.17024
Коммиты5
Строки+180 -116
Чтение2 мин

5 из 5 записей · 5 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Высокий Неблокирующие OpenSSL handshakes ожидают вместо немедленного сбоя TOpenSslNetTls.AfterConnection и AfterAccept теперь вызывают SSL_connect и SSL_accept через CheckProc. CheckProc повторяет SSL_ERROR_WANT_READ или SSL_ERROR_WANT_WRITE, ждёт соответствующий TNetEvents и ограничивает процесс пятью секундами. Также добавлены TShort95 и PShort95. Исправления mormot.core.base+1 1e45eae5+43-6

lib: fixed unexpected TLS exception with OpenSSL async socket

Влияние

Async clients и servers на OpenSSL больше не превращают нормальный переход неблокирующего handshake в EOpenSsl exception. Зависший handshake выдаёт явный timeout через пять секунд.

Публичный API

  • TShort95added — Теперь доступны публичный alias string[95] и pointer type PShort95.

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

2 Высокий TLS failures сохраняют ошибку, полученную рядом с SSL_connect EOpenSsl.CheckFailed принимает optional sslerrcode. TOpenSslNetTls.CheckProc передаёт ошибку, возвращённую CheckSsl сразу после SSL_connect или SSL_accept, поэтому formatter не вызывает SSL_get_error повторно после промежуточной работы. Исправления mormot.lib.openssl11 13c7b4dd+10-6

lib: fixed TOpenSslNetTls.CheckProc error report

Влияние

Финальные ошибки сертификата, протокола и peer в новом async handshake path сообщают исходное состояние SSL_ERROR_* и verification context вместо устаревшего кода.

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

3 Средний Stack и system suffixes формируются до log lock TSynLog.LockAndPrepareWrite заполняет thread-local buffers StackTrace и SysInfo до fWriteSafe.Lock. LogTrailerAndUnlock добавляет их и освобождает lock. TSynLogThreadInfo получает ShortString на 255 bytes и TShort63, увеличиваясь на 320 bytes на thread. Производительность mormot.core.log b1ddba46+80-60

core: TSynLog pre-renders the stack trace and the sysinfo

Влияние

Медленная загрузка stack symbols и OS queries больше не удлиняют сериализованную запись. Сервисы с множеством logging threads используют больше thread-local memory, а suffixes ограничены 255 и 63 bytes.

Стоит взглянуть

Если включены LevelStackTrace или LevelSysInfo, сравните полноту suffixes и измерьте contention и thread-local memory на реальной нагрузке.

Публичный API

  • TSynLogFamily.LevelStackTracebehaviour-changed — Настроенные stack traces формируются вне write lock и ограничены 255 AnsiChars.
  • TSynLogFamily.LevelSysInfobehaviour-changed — Настроенные system-information suffixes формируются вне write lock в TShort63.

Модули

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

4 Низкий System information можно добавлять к существующему short text mormot.core.os публикует AppendSysInfo, который добавляет processor, load, uptime и memory data в ShortString без очистки. RetrieveSysInfoText теперь очищает результат и вызывает новый helper. Удалён оставшийся writeln из CheckProc. Новые возможности mormot.core.os+1 ea2c5066+11-4

core: new AppendSysInfo() function

Влияние

Существующие вызовы RetrieveSysInfoText сохраняют replacement semantics. Новые callers могут собирать prefixed diagnostics в одной ограниченной ShortString, а OpenSSL retry больше не пишет debug lines в stdout.

Публичный API

  • AppendSysInfoadded — Процедура добавляет system information в переданную ShortString, не очищая существующее содержимое.

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

5 Низкий Регистрация debug files избегает лишнего exclusive lock DebugFileRegister проверяет shutdown и известные unknown libraries под DebugFilesSafe.ReadLock до WriteLock, затем повторяет проверку в write section. RawStackTrace упрощает exception guard, а AppendCallerShort больше не разрешает symbols вне executable. Внутреннее устройство mormot.core.log d09fc6cd+36-40

core: some TSynLog and stack trace refactoring

Влияние

Повторный stack resolution библиотек без debug data больше не сериализует readers за write lock. AppendCallerShort ограничен debug information executable; FindLocationShort по-прежнему разрешает внешние libraries и symbols.

Публичный API

  • TDebugFile.AppendCallerShortbehaviour-changed — Caller stacks больше не включают fallback names или symbols для frames вне executable.

Модули

Arnaud Bouchez · 14:24 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