Требует действийможет затронуть работающую системуRaw payload содержит пять non-merge commits и ни одного merge; ниже покрыт каждый. Нет deprecation notice и superseded_by. Исключаемый диапазон подтверждён прямым исправлением CheckProc в build 17024 того же payload.
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.
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 через пять секунд.
Рекомендуется обновиться
Обновляйтесь сразу до build 2.4.17024 и тестируйте неблокирующие client/server handshakes; не развёртывайте первую retry-реализацию отдельно.
Публичный API
TShort95added — Теперь доступны публичный alias string[95] и pointer type PShort95.
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 вместо устаревшего кода.
Рекомендуется обновиться
Переходите на build 2.4.17024 и проверьте ожидаемые детали EOpenSsl для отклонённых сертификатов и несовместимых протоколов.
Модули
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.
Модули
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, не очищая существующее содержимое.
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.