mORMot2 Daily每日上游提交速读

异步 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 状态。

版本号2.4.17019 → 2.4.17024
提交5
行数+180 -116
阅读1 分钟

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。

公开 API

  • TShort95added — 新增公开 string[95] alias 及其 PShort95 pointer type。

Arnaud Bouchez · 14:10 UTC · 在 GitHub 上查看该提交 →

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_* 状态及验证上下文,不再使用过期或无关代码。

Arnaud Bouchez · 18:15 UTC · 在 GitHub 上查看该提交 →

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。

Arnaud Bouchez · 14:28 UTC · 在 GitHub 上查看该提交 →

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,不会重置现有内容。

Arnaud Bouchez · 14:23 UTC · 在 GitHub 上查看该提交 →

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。

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