mORMot2 Daily每日上游提交速读

线程结束清理自动化,同时回调类型发生变化

线程终止清理现集中到 TThreadAbstract;对重写或绑定相关回调及 REST/ORM 方法的应用,这会造成源码级签名不兼容。另一个修复避免 TWebSocketProtocol.SetEncryptKey 在 aSettings 为 nil 时静默关闭加密。Windows HTTP API WebSocket 启动、多个共享缓存和周期清理触发器也获得并发修复;同时合并的新功能允许 HTTP 处理器直接从 TStream 流式发送响应体。

要点

  • TOnNotifyThread 现接收 TThreadAbstract,TSynLogFamily.OnThreadEnded 被移除,相关 REST/ORM 虚方法也改用 TThreadAbstract。
  • 使用非空密钥且 aSettings = nil 时,TWebSocketProtocol.SetEncryptKey 现在仍会启用加密。
  • HTTP API WebSocket 采用延迟且串行的初始化;Wine 明确避开不完整的 websocket.dll 与 http.sys 路径。
  • HTTP 处理器可通过 SetOutStream 返回 TStream;socket 服务器直接流式发送,http.sys 与 REST-over-WebSockets 则在文档限制内缓冲。
  • CAS 与锁修复避免并发请求重复执行空闲、会话、缓存及连接清理。

升级建议

若使用 aSettings=nil 的 WebSocket 加密、Windows HTTP API WebSocket 或受影响的共享缓存,请升级到 build 2.4.16737。重新编译自定义线程回调及 REST/ORM 派生类:TOnNotifyThread 与多个虚方法现要求 TThreadAbstract。直接调用 LockedGet32 的代码须改为 LockedReset32。原始数据未报告本期还有后续替代提交。

版本号2.4.16701 → 2.4.16737
提交35
行数+1598 -392
阅读3 分钟

33 条中的 33 条 · 上游 35 次提交

主题
# 条目 类别 单元
1 高 REST 与 ORM 线程钩子现要求 TThreadAbstract mormot.rest.core、mormot.rest.server、mormot.rest.http.server 与 mormot.orm 中公开的 BeginCurrentThread、EndCurrentThread、OnBeginCurrentThread、OnEndCurrentThread、HttpThreadStart 和 HttpThreadTerminate 声明由 TThread 改为 TThreadAbstract,并移除旧的显式日志族清理。 破坏性变更 mormot.orm.core+5 69869f49+33-36

rest/orm: use TOnNotifyThread new definition

影响

重写这些虚方法的自定义派生类以及绑定到钩子的过程变量可能无法编译,需将 Sender 参数收窄为 TThreadAbstract。运行时清理由新基类路径完成。

需要迁移

搜索 BeginCurrentThread、EndCurrentThread、OnBeginCurrentThread、OnEndCurrentThread、HttpThreadStart 与 HttpThreadTerminate 的重写及回调;将 Sender: TThread 改为 Sender: TThreadAbstract 后重新编译。

公开 API

  • TRest.BeginCurrentThread / TRest.EndCurrentThreadsignature-changed — Sender 从 TThread 改为 TThreadAbstract。
  • TRestOrmParent.BeginCurrentThread / TRestOrmParent.EndCurrentThreadsignature-changed — Sender 从 TThread 改为 TThreadAbstract。

Arnaud Bouchez · 13:46 UTC · 在 GitHub 上查看该提交 →

2 高 TOnNotifyThread 参数收窄且日志族回调被移除 mormot.core.threads 将 TOnNotifyThread 从 procedure(Sender: TThread) 改为 procedure(Sender: TThreadAbstract)。新增 TThreadAbstract.OnThreadEnded,mormot.core.log 移除 TSynLogFamily.OnThreadEnded,并把 TLoggedThread 清理移出其 DoTerminate。 破坏性变更 mormot.core.log+1 f1f8d766+12-13

core: breaking change of TSynLogFamily.OnThreadEnded into TThreadAbstract

影响

声明为 Sender: TThread 的现有回调方法不再兼容 TOnNotifyThread,直接引用 TSynLogFamily.OnThreadEnded 也无法编译。Delphi 与 FPC 项目均需源码迁移。

需要迁移

搜索 TOnNotifyThread 绑定及 Sender: TThread 处理器,将其改为 Sender: TThreadAbstract;把 TSynLogFamily.OnThreadEnded 引用替换为 TThreadAbstract.OnThreadEnded 或依赖 TThreadAbstract 自动清理。

公开 API

  • TOnNotifyThreadsignature-changed — Sender 现为 TThreadAbstract,而非 TThread。
  • TSynLogFamily.OnThreadEndedremoved — 清理职责移至 TThreadAbstract。
  • TThreadAbstract.OnThreadEndedadded — 使用新回调类型封装 TSynLog.NotifyThreadEnded。

Arnaud Bouchez · 13:41 UTC · 在 GitHub 上查看该提交 →

3 高 LockedGet32 更名并可原子写入任意整数 mormot.core.base 将公开函数 LockedGet32(Target) 替换为 LockedReset32(Target, New),New 默认为零。mormot.net.async 的两个唤醒计数器调用点同步更新。 破坏性变更 mormot.core.base+1 bcf834a5+9-9

core: new LockedReset32() wrapper function

影响

直接调用 LockedGet32 的代码将无法编译。省略第二个参数的 LockedReset32 保留原先与零交换的行为,新参数也允许写入其他替换值。

需要迁移

搜索 LockedGet32 并将每个调用改为 LockedReset32;仅在需要非零替换值时传入 New。

公开 API

  • LockedGet32removed — 由 LockedReset32 替代。
  • LockedReset32added — 原子返回 Target^ 并写入 New,默认值为零。

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

4 高 WebSocket 设置指针为 nil 时不再关闭加密 mormot.net.ws.core 的 TWebSocketProtocol.SetEncryptKey 现在仅在密钥为空时退出,不再因 aSettings=nil 退出。无设置时先尝试默认 ECDHE 文件处理,再尝试完整密钥语法,最后用旧版 Sha256Weak 派生 AES-CTR-128 密钥。 安全 mormot.net.ws.core 57660dac+18-11

net: fixed TWebSocketProtocol.SetEncryptKey() with aSettings = nil

影响

此前非空密钥配合 nil 设置指针会清空 fEncryption 并返回,使协议静默处于未加密状态。相同调用现在会按文档兼容默认值建立加密。

公开 API

  • TWebSocketProtocol.SetEncryptKeybehaviour-changed — aSettings=nil 现在选择兼容默认值,而非关闭加密。

Arnaud Bouchez · 07:41 UTC · 在 GitHub 上查看该提交 →

5 高 HTTP API WebSocket 构造时安全初始化 websocket.dll mormot.net.server 的 THttpApiWebSocketServer.Create 在检查 WebSocketApi.WebSocketEnabled 前调用 WebSocketApiInitialize。mormot.lib.winhttp 在可重入全局锁内加载 DLL 并绑定导出,新测试覆盖构造器首次使用及 16 线程并发初始化。 修复 mormot.lib.winhttp+1 41dbfbba+211-18

fix: initialize HTTP API WebSockets lazily

影响

Windows HTTP API WebSocket 服务器可作为进程首个 WebSocket API 使用者,不再错误抛出“not supported”;并发首次使用也不会看到未完整绑定的函数指针。

公开 API

  • THttpApiWebSocketServer.Createbehaviour-changed — 检查可用性前执行 WebSocket API 延迟初始化。

Sven Harazim · 11:03 UTC · 在 GitHub 上查看该提交 →

6 中 最终并发整理避免旧缓存结果覆盖新值 在 mormot.core.os 中,TCachedValue.Cache 仅在 TixShr 仍等于回调前占用的 tick 时写入慢回调结果。该提交还让 TSynDictionary 使用 VCardinal 读取,并简化 mormot.rest.server 中的等价代码,其他单元主要是注释。 修复 mormot.core.json+4 14d901e8+16-16

all: some refactoring after today's commits

影响

并发调用者不再会让较旧且较慢的计算覆盖更新的缓存值。本提交不改变现有 Delphi/FPC 应用 API。

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

7 中 REST 服务器时间戳缓存采用原子刷新与加锁读取 mormot.rest.core 的 TRest.GetServerTimestamp 使用 LockedExc32,为每个 512 ms 时间段选出单一刷新者。TLightLock 现保护缓存 TTimeLogBits 的读写。 修复 mormot.rest.core ad1dcbf5+18-12

rest: made TRest.GetServerTimestamp atomic

影响

并行 REST 请求会读取一致的服务器时间戳;这对 64 位值并非天然原子的 32 位 Delphi/FPC 尤其重要。应用 API 不变。

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

8 中 复用日志线程槽时完整重置本地状态 mormot.core.log 的 TSynLog.NotifyThreadEnded 现清零 ThreadNumber 作为一次性复用标记;InitThreadNumber 在分配复用槽前重置 RecursionCount 与 Flags。ThreadBitLo 仍用于延迟初始化标记。 修复 mormot.core.log 35d353c9+13-9

core: fixed TSynLog.NotifyThreadEnded threads recycling

影响

复用 TSynLog 槽的短生命周期线程不再继承前一线程的递归计数或逐线程日志标志,可避免静默抑制日志或残留行为。

Arnaud Bouchez · 09:41 UTC · 在 GitHub 上查看该提交 →

9 中 Kerberos keytab 刷新串行化且重载不占用锁 mormot.lib.gssapi 的 TServerSspiKeyTab.TryRefresh 使用 fSafe 占用每个两秒刷新窗口,释放锁后再调用 SetKeyTab。tick 加一,避免首个有效周期与初始零值混淆。 修复 mormot.lib.gssapi 6f53f3d7+14-7

lib: optimized TServerSspiKeyTab.TryRefresh thread safety

影响

并发 SSPI/GSSAPI 认证不会同时重载同一 keytab,其他调用也无需在锁内等待文件解析。公开 API 不变。

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

10 中 WebSocket DLL 仅探测一次,并在 Wine 下禁用 mormot.lib.winhttp 的 TWebSocketApi 增加 Tested 标志。WebSocketApiInitialize 在全局锁内记录首次加载尝试,避免反复失败,并在仅提供部分 websocket.dll 桩的 Wine 上直接返回。 修复 mormot.lib.winhttp 2f0cdace+14-6

lib: fixed WebSocketApiInitialize

影响

不支持的 Windows 环境不会重复探测 DLL;Wine 也不会仅因存在桩导出而被误判为支持 WebSocket。受支持的原生系统只初始化一次。

公开 API

  • TWebSocketApi.Testedadded — 记录 websocket.dll 可用性已完成探测。

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

11 中 并发 REST 请求不再同时触发 OnIdle mormot.rest.server 的 TRestServer.Uri 将 fOnIdleLastTix 的先读后写检查改为 LockedExc32 比较交换。只有推进 tick 的请求会调用 OnIdle。 修复 mormot.rest.server 7df2308e+8-8

rest: fixed TRestServer.OnIdle trigger

影响

多个请求在同一 tick 完成时,OnIdle 处理器不再因此并发进入。包含非可重入空闲任务的后端可避免重复维护与竞态。

公开 API

  • TRestServer.OnIdlebehaviour-changed — 每个 tick 最多由一个请求调用。

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

12 中 全局时间缓存的比较交换不再复用期望值变量 mormot.core.datetime 的 FromGlobalTime 将 GlobalTime.clock 复制到局部变量 c,并把这个稳定期望值传给 LockedExc32。此前调用同时以 clock 作为目标和期望参数。 修复 mormot.core.datetime f7cfb5db+8-5

core: fixed FromGlobalTime() atomicity

影响

并发时间格式化在更新共享 16 ms 缓存前采用明确的 CAS 选举。Delphi/FPC 调用者的 FromGlobalTime 签名与精度不变。

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

13 中 TLoggedThread 即使未写日志也会释放日志状态 mormot.core.threads 的 TLoggedThread.DoTerminate 移除 fLog 为 nil 时的提前退出,在 inherited DoTerminate 后无条件调用类级 TSynLog.NotifyThreadEnded,再清空 fLog。 修复 mormot.core.threads 2c03b28a+3-5

core: fixed TLoggedThread.DoTerminate

影响

已获取线程本地日志元数据但未输出记录的 TLoggedThread 现在会正确归还槽位,长期运行服务可避免日志线程注册表逐渐耗尽。

Arnaud Bouchez · 07:56 UTC · 在 GitHub 上查看该提交 →

14 中 预连接隧道工作线程现在以成功网络结果启动 mormot.net.tunnel 的 TTunnelLocalThread.DoExecute 在主线程已建立 socket 连接时,先设置 res := nrOk,再设置 fState := stProcessing。此前该分支会留下未初始化或陈旧的 res。 修复 mormot.net.tunnel 677a3579+5-2

net: fixed TTunnelLocalThread process

影响

使用主线程已连接 socket 的隧道会话不再把未定义网络结果带入后续关闭或错误处理。连接流程及 API 签名不变。

Arnaud Bouchez · 07:36 UTC · 在 GitHub 上查看该提交 →

15 中 TCachedValue 在释放锁前预留刷新任务 mormot.core.os 的 TCachedValue.Cache 在 Safe 锁内设置 Tix32,然后在锁外执行慢 Call 回调,从而在其他线程进入前标记刷新已被占用。 修复 mormot.core.os 84ab9449+3-3

core: fixed race in TCachedValue.Cache

影响

多个调用者不再于同一周期启动相同的昂贵缓存计算。后续 14d901e 还阻止延迟的旧计算覆盖新结果。

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

16 中 TThreadAbstract 现在线程结束时总会清理日志 mormot.core.threads 的 TThreadAbstract.DoTerminate 在继承终止及旧版 Finished 更新后调用 TSynLog.NotifyThreadEnded,并吞掉关闭异常。框架队列和计时器移除显式 OnThreadEnded 回调;独立日志刷新 TThread 保留手动调用。 新功能 mormot.core.log+2 8ef4ae1b+30-35

core: TThreadAbstract calls TSynLog.NotifyThreadEnded

影响

正确执行 inherited DoTerminate 的每个派生类都会自动释放逐线程日志状态。直接继承 TThread 且使用 TSynLog 的类仍需自行调用 TSynLog.NotifyThreadEnded。

值得一看

公开 API

  • TThreadAbstract.DoTerminatebehaviour-changed — 线程关闭时自动调用 TSynLog.NotifyThreadEnded。

Arnaud Bouchez · 13:43 UTC · 在 GitHub 上查看该提交 →

17 中 TThreadAbstract 在 Delphi 7/2007 上统一提供 Finished 当 RTL 缺少相关成员时,mormot.core.threads 为 TThreadAbstract 增加模拟的公开 Finished 属性与 fFinished 字段,并在 DoTerminate 设置。TLoggedThread.ExecuteDone 被移除,mormot.net.tftp.server 改用 Finished。 编译器与平台 mormot.core.threads+1 5678b9d9+31-13

core: emulate TThread.Finished property on Delphi 7/2007

影响

旧版 Delphi 可与新版 Delphi/FPC 一样检查 TThreadAbstract.Finished。引用公开 TLoggedThread.ExecuteDone 属性的代码须改用 Finished。

需要迁移

搜索 TLoggedThread.ExecuteDone,并替换为继承的 Finished 属性。

公开 API

  • TThreadAbstract.Finishedadded — 在 Delphi 7/2007 上模拟;较新 RTL 已提供。
  • TLoggedThread.ExecuteDoneremoved — 请改用 Finished。

Arnaud Bouchez · 11:54 UTC · 在 GitHub 上查看该提交 →

18 中 Wine 新增明确的弱 http.sys 能力标志 mormot.core.os 向 TWindowsSpecs 增加 wsWeakHttpSys,并在检测到 Wine 时设置。mormot.rest.http.server 的 TRestHttpServer.Create 使用该能力标志,从 HTTP_API_MODES 回退到 useHttpAsync。 编译器与平台 mormot.core.os+3 b4238a29+10-8

net: introducing wsWeakHttpSys flag

影响

Wine 下的 REST 服务器会避开已知不完整的 http.sys 实现,改用异步 socket 服务器。原生 Windows 行为不变。

公开 API

  • TWindowsSpecs.wsWeakHttpSysadded — 标记不应选择 http.sys 的环境。

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

19 中 HTTP API WebSocket 工作线程跟进新回调类型 mormot.net.server 将 TSynThreadPoolHttpApiWebSocketServer.OnThreadStart 与 OnThreadTerminate 参数改为 TThreadAbstract。TSynWebSocketGuard 现继承 TThreadAbstract,并移除手动 TSynLog.NotifyThreadEnded。 编译器与平台 mormot.net.server f115b536+7-8

net: follow new TThreadAbstract / TOnNotifyThread definitions

影响

框架 WebSocket 工作线程与守护线程适配新的 TOnNotifyThread 契约并获得自动日志清理。重写受保护回调的自定义派生类可能也需更新签名。

值得一看

Arnaud Bouchez · 13:45 UTC · 在 GitHub 上查看该提交 →

20 低 字典过期扫描增加每秒原子门控 mormot.core.json 的 TSynDictionary.DeleteDeprecated 通过新增的 TSynVarData.VCardinal 视图读取共享 tick,并用 LockedExc32 占用扫描。mormot.core.base 增加了该变体记录字段。 性能 mormot.core.base+1 c7887dc9+35-33

core: ensure TSynDictionary.DeleteDeprecated trigger is atomic

影响

并发字典使用者不会在同一秒重复执行过期扫描。TSynDictionary 行为保持不变;检查 TSynVarData 的代码可使用新增的无符号视图。

公开 API

  • TSynVarData.VCardinaladded — 变体记录的 32 位无符号叠加字段。

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

21 低 每个周期只执行一次连接池过期扫描 mormot.db.sql 的 TSqlDBConnectionPropertiesThreadSafe.ThreadSafeConnection 在调用 DeleteDeprecated 前以 LockedExc32 取代未同步的时间戳赋值。ClearConnectionPool 原子重置触发器。 性能 mormot.db.sql a6d76aa9+12-9

db: use CAS for TSqlDBConnectionPropertiesThreadSafe.DeleteDeprecated

影响

在并发数据库流量下,每 32 秒只有一个线程执行可选的过期连接扫描。后端行为及公开 API 不变。

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

22 低 MVC 方法缓存每秒只清理一次 mormot.core.mvc 的 TMvcRunWithViews 处理流程现在先用 LockedExc32 占用 fOnIdlePurgeCacheTix32,再调用 PurgeMethodCache;PurgeMethodCache 不再自行赋值该 tick。 性能 mormot.core.mvc 83f4846b+6-5

mvc: atomic TMvcRunWithViews.PurgeMethodCache

影响

并发 MVC 请求不会在同一秒内重复完整扫描缓存。缓存结果及应用可见的 MVC API 行为保持不变。

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

23 低 每个周期仅一个请求清理过期 REST 会话 mormot.rest.server 的 TRestServerUriContext.Authenticate 现在先用 LockedExc32 推进 fSessionsDeprecatedTix,再调用 SessionDeleteDeprecated;清理例程不再另做非原子赋值。 性能 mormot.rest.server 14d5a05d+6-5

rest: use a CAS trigger for TRestServer.SessionDeleteDeprecated

影响

高负载认证服务器可避免多个请求线程同时进入每秒一次的过期扫描。会话过期语义及公开 API 不变。

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

24 低 HTTP 日志时间戳每秒仅由一个线程格式化 mormot.net.http 的 THttpLogger.Append 在调用 SetTimeText 前对 fTimeTix32 使用 LockedExc32。竞争请求线程会复用缓存的 ISO-8601 与 NCSA 字符串。 性能 mormot.net.http d7b698d8+6-5

net: optimized THttpLogger.Append time update

影响

高吞吐 HTTP 日志减少重复日期转换,同时保留原有的一秒缓存。日志格式及公开 API 不变。

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

25 低 StackTrace 声明恢复 Delphi 7 编译兼容 mormot.core.log 仅在定义 HASINLINE 时为两个重载 TSynLog.StackTrace 声明添加 static 指令,旧版 Delphi 不再解析不支持的指令。 编译器与平台 mormot.core.log 332614f5+6-4

code: fixed Delphi 7 compilation

影响

使用 mormot.core.log 的 Delphi 7 构建可再次编译。较新 Delphi 与 FPC 目标的 StackTrace API 及运行行为不变。

Arnaud Bouchez · 13:40 UTC · 在 GitHub 上查看该提交 →

26 低 编译器特性标志现描述 TThread.Finished 可用性 mormot.defines 为 FPC 与 Unicode Delphi 增加 HASTTHREADFINISHED,并在 Windows Delphi 下定义前补充 WINDELPHI 文档。这些条件服务于旧版 TThread 兼容代码。 编译器与平台 mormot.defines 86422854+6-3

core: added missing HASTTHREADFINISHED conditional

影响

框架仅在 Delphi 7/2007 上启用 Finished 模拟,不再用于已提供该属性的目标。应用代码无直接 API 变化。

Arnaud Bouchez · 11:55 UTC · 在 GitHub 上查看该提交 →

27 低 响应流后续整理加强清理与测试诊断 SetOutStream 合并后,mormot.net.http 让 OutContentStreamDiscard 对 nil 安全,并集中重置字段。mormot.net.async 明确 AsyncResponse 会丢弃待发送流;测试改用 RaiseStreamError 并忽略预期 EStreamError 日志。 内部重构 mormot.net.async+1 7627b1ad+20-26

net: some refactoring after #554

影响

自有响应流仍会释放,延迟异步内容仍替换任何待发送流。本后续提交不改变文档中的 SetOutStream API 或服务器能力限制。

Arnaud Bouchez · 07:35 UTC · PR #554 · 在 GitHub 上查看该提交 →

28 低 启动 nonce 不再递归进入主 Random128 生成器 mormot.crypt.secure 的 TCryptRandomEntropy.Create 改用 RandomBytes 而非 Random128 填充 16 字节应用级 nonce。相关注释说明 TAes.EncryptInitRandom 必须避免 Random128 递归,系统随机调用用于回退播种。 内部重构 mormot.core.os.posix+5 a0141ee6+13-23

core: don't call Random128() at startup

影响

密码熵源初始化避免在主 PRNG 构造期间再次进入它。nonce 仍为随机值;公开随机 API 与生成数据格式不变。

Arnaud Bouchez · 07:33 UTC · 在 GitHub 上查看该提交 →

29 低 全局时间缓存直接存储 TSynSystemTime mormot.core.datetime 将 GlobalTime 缓存字段从 TSystemTime 改为 TSynSystemTime,并移除 FromGlobalTime 中的局部 absolute 别名。填充仍使每个缓存记录占 64 字节。 内部重构 mormot.core.datetime 6dda432f+12-11

core: simplified FromGlobalTime() implementation

影响

这简化了内部复制,不改变公开 FromGlobalTime 契约或 16 ms 缓存精度。现有 Delphi/FPC 应用代码不受影响。

Arnaud Bouchez · 13:49 UTC · 在 GitHub 上查看该提交 →

30 低 Angelize 看门狗移除手动日志清理回调 mormot.app.agl 从 TSynAngelizeRunner 与看门狗创建中移除显式 TSynLog.NotifyThreadEnded 和 log.Family.OnThreadEnded 调用;其 TThreadAbstract 继承链现在负责清理。 内部重构 mormot.app.agl afde3637+4-5

agl: follow new TThreadAbstract feature

影响

Angelize 行为应保持不变,线程结束通知由集中机制执行,而非每个类手动调用。应用 API 不变。

Arnaud Bouchez · 13:46 UTC · 在 GitHub 上查看该提交 →

31 低 SQLite 与 PostgreSQL 线程适配集中式日志清理 mormot.db.sql.postgres 从基于 TThreadAbstract 的异步线程移除冗余 SynDBLog.NotifyThreadEnded。SQLite 备份线程仍是普通 TThread,并保留注明原因的 SQLite3Log.NotifyThreadEnded 调用。 内部重构 mormot.db.raw.sqlite3+1 9a1c1313+4-5

db: adapt to the new TThreadAbstract class

影响

数据库线程日志清理应恰好执行一次,不改变 SQLite 备份或 PostgreSQL 异步行为。面向应用的数据库 API 不变。

Arnaud Bouchez · 13:44 UTC · 在 GitHub 上查看该提交 →

32 低 测试与日志示例改用 TThreadAbstract dmvc-ai 日志示例与 test.net.proto 中的 TPipeConsumerThread 现从 TThreadAbstract 而非 TThread 继承。本提交不改动框架实现或公开声明。 测试 56660c17+4-4

test: favor TThreadAbstract usage

影响

应用代码不受影响;更新后的示例展示推荐基类,使线程结束日志清理自动执行。

Arnaud Bouchez · 13:48 UTC · 在 GitHub 上查看该提交 →

33 低 Sha256Weak 文档明确仅供旧版兼容 mormot.crypt.core 注释说明 Sha256Weak 会填充短于 256 字节的输入,仅用于 mORMot 1 兼容,不应在新代码或新生成数据中使用,并推荐 TSynSigner.Pbkdf2 与 Modular Crypt。 文档 mormot.crypt.core 8d60e5ed+7-6

crypt: refined Sha256Weak() documentation

影响

运行时及 API 均无变化。更明确的措辞有助于安全审查将 Sha256Weak 使用识别为兼容性债务,而非推荐的密码派生方案。

值得一看

公开 API

  • Sha256Weakdeprecated — 文档限定其仅用于 mORMot 1 兼容;新数据应使用 TSynSigner.Pbkdf2 或 Modular Crypt。

Arnaud Bouchez · 07:55 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