立即处理可能影响正在运行的系统原始 payload 包含 5 个 non-merge commit,无 merge commit;下方覆盖全部 commit。它没有 deprecation notice 或 superseded_by 标记。避开区间由同一 payload 中 build 17024 对 CheckProc 的直接修正支持。
异步 OpenSSL handshake 正确重试,TSynLog 同时缩短写锁
使用 OpenSSL 的非阻塞 client/server 现在会在 WANT_READ 或 WANT_WRITE 后重试 SSL_connect 与 SSL_accept,而不再视为致命错误。最终 commit 保留首次 SSL_get_error 结果,使真实 handshake 失败报告正确原因。TSynLog 还把 stack trace 与 system information 收集移出 writer lock,以更大的每线程状态和有界 suffix 换取更低争用。
要点
- 应采用 build 2.4.17024 的 13c7b4dd94b23c25d51e5b0ab9b6e207cb039207。
- 异步 socket 上的 OpenSSL TLS handshake 现在会重试 WANT_READ/WANT_WRITE,最长五秒。
- 避开 build 2.4.17020–2.4.17023:新重试循环在报告终止错误时再次调用 SSL_get_error;2.4.17024 改为传入已捕获错误码。
- TSynLog 在获取每个 writer 的锁前预渲染配置的 stack trace 与 system information。
- TSynLog thread record 增加 320 bytes;stack-trace suffix 上限为 255 bytes,system-information suffix 为 63 bytes。
- AppendSysInfo 是新的公开 helper,可在不清空现有 ShortString 的情况下追加系统信息。
升级建议
请采用 build 2.4.17024。使用非阻塞 socket 的 OpenSSL 项目应测试 client SSL_connect 与 server SSL_accept 在 WANT_READ、WANT_WRITE、timeout 与证书失败下的行为。不要停留在 2.4.17020–2.4.17023,其重试路径的最终错误报告不完整。若启用 LevelStackTrace 或 LevelSysInfo,请比较日志 suffix,并计入每个日志 thread 新增的 320-byte thread-local 状态。
5 条中的 5 条 · 上游 5 次提交
1
高
非阻塞 OpenSSL handshake 会等待,不再立即失败
TOpenSslNetTls.AfterConnection 与 AfterAccept 现在通过 CheckProc 调用 SSL_connect/SSL_accept。CheckProc 重试 SSL_ERROR_WANT_READ 或 SSL_ERROR_WANT_WRITE,等待对应 TNetEvents,并施加五秒 deadline。同时新增 TShort95 与 PShort95。
修复
mormot.core.base+1
1e45eae5+43-6
lib: fixed unexpected TLS exception with OpenSSL async socket
影响
使用 OpenSSL 的异步 client/server 不再把正常的非阻塞 handshake 过渡变成 EOpenSsl exception。停滞 handshake 会在五秒后抛出明确 timeout。
建议升级
直接升级到 build 2.4.17024 并测试非阻塞 client/server handshake;不要单独部署此首版重试实现。
公开 API
TShort95added — 新增公开 string[95] alias 及其 PShort95 pointer type。
2
高
TLS 失败保留 SSL_connect 后立即捕获的错误
EOpenSsl.CheckFailed 新增可选 sslerrcode。TOpenSslNetTls.CheckProc 传入紧随 SSL_connect 或 SSL_accept 后由 CheckSsl 返回的错误,使 exception formatter 不再于中间操作后再次调用 SSL_get_error。
修复
mormot.lib.openssl11
13c7b4dd+10-6
lib: fixed TOpenSslNetTls.CheckProc error report
影响
新异步 handshake 路径上的证书、协议与 peer 终止失败现在报告原始 SSL_ERROR_* 状态及验证上下文,不再使用过期或无关代码。
建议升级
采用 build 2.4.17024,并验证被拒证书与协议不匹配会产生预期 EOpenSsl 详情。
3
中
stack 与 system suffix 在日志锁前渲染
TSynLog.LockAndPrepareWrite 现在于 fWriteSafe.Lock 前填充 thread-local StackTrace 与 SysInfo buffer。LogTrailerAndUnlock 追加这些 buffer 并释放锁。TSynLogThreadInfo 新增 255-byte ShortString 与 TShort63,文档标明每线程增加 320 bytes。
性能
mormot.core.log
b1ddba46+80-60
core: TSynLog pre-renders the stack trace and the sysinfo
影响
缓慢的 stack-symbol 加载与 OS 查询不再延长串行日志写入区。拥有大量日志 thread 的服务会消耗更多 thread-local memory,配置 suffix 分别限制为 255 与 63 bytes。
值得一看
若启用 LevelStackTrace 或 LevelSysInfo,请比较 suffix 完整性,并在代表性负载下测量 contention 与 thread-local memory。
公开 API
TSynLogFamily.LevelStackTracebehaviour-changed — 配置的 stack trace 在写锁外预渲染,并限制为 255 个 AnsiChar。TSynLogFamily.LevelSysInfobehaviour-changed — 配置的 system-information suffix 在写锁外预渲染到 TShort63。
4
低
系统信息可追加到现有短文本
mormot.core.os 公开 AppendSysInfo,可在不清空 ShortString 的情况下追加处理器、load、uptime 与内存数据。RetrieveSysInfoText 现在先清空目标再调用新 helper。同时移除 CheckProc 遗留的 writeln。
新功能
mormot.core.os+1
ea2c5066+11-4
core: new AppendSysInfo() function
影响
现有 RetrieveSysInfoText 调用仍为替换语义。新调用方可在单个有界 ShortString 中构建带前缀诊断;OpenSSL handshake 重试也不再向标准输出写 debug 行。
公开 API
AppendSysInfoadded — 此 procedure 把系统信息追加到传入 ShortString,不会重置现有内容。
5
低
debug-file 注册避免不必要的独占锁
DebugFileRegister 先在 DebugFilesSafe.ReadLock 下检查 shutdown 与已知未知 library,再获取 WriteLock,并在写区内复查。RawStackTrace 简化异常保护;AppendCallerShort 不再解析 executable 外部 symbol。
内部重构
mormot.core.log
d09fc6cd+36-40
core: some TSynLog and stack trace refactoring
影响
对已知无 debug data 的 library 重复进行 stack 解析时,不再让所有 reader 等待 write lock。AppendCallerShort 输出限于 executable debug information;FindLocationShort 仍解析外部 library 名称与 symbol。
公开 API
TDebugFile.AppendCallerShortbehaviour-changed — 调用方 stack 不再包含 executable 外部 frame 的 fallback 名称或 symbol。