值得一看可能需要的修复或功能Everything reviewed cleanly.
TOSLightLock 改用原生 futex,并修复 ICU 死锁
今天的提交对 mORMot 2 核心同步原语做了较大改动。TOSLightLock 现在在 Linux 上使用原生 futex,在 Windows 8+ 上使用 WaitOnAddress,有望显著改善争用下的性能。此外修复了一处 ICU 库死锁,异步网络轮询也增加了边界检查。
要点
- TOSLightLock 在 Linux 上使用原生 futex,在 Windows 8+ 上使用 WaitOnAddress。
- TIcuLibrary 修复了创建共享转换器时的死锁。
- TAsyncConnections 修复了线程轮询中可能的越界问题。
- 自适应自旋等待机制被提取到 core base 单元。
升级建议
Teams pushing heavy multithreaded workloads on Linux or Windows 8+ should benefit from the TOSLightLock upgrade. The ICU deadlock fix is recommended for applications dealing with internationalization.
10 条中的 10 条 · 上游 10 次提交
1
高
修复加载 ICU 转换器时的死锁
Corrects the unlock logic in TIcuLibrary.SharedUcnvGet(). The previous code mistakenly released a converter-specific lock instead of the main library lock after populating the converter cache.
修复
mormot.core.os
87dbb9fc+3-3
core: fix deadlock in TIcuLibrary
影响
避免多个线程同时向 ICU 库请求文本转换器时发生死锁。
建议升级
Pull this commit if your server relies heavily on ICU internationalization functions.
2
高
TOSLightLock uses WaitOnAddress on Windows 8+
Upgrades TOSLightLock on Windows to use the WaitOnAddress and WakeByAddressSingle API (introduced in Windows 8), moving away from Slim Reader/Writer (SRW) locks.
性能
mormot.core.os+3
17a26fa9+106-124
core: TOSLightLock now uses WaitOnAddress/WakeByAddressSingle on Win8+
影响
Faster lock acquisition on Windows 8 and newer, especially under high contention, by avoiding SRW lock overhead.
3
高
TOSLightLock upgraded to use native futex on Linux
Replaces the underlying Linux implementation of TOSLightLock with a direct 32-bit futex syscall instead of a TRTLCriticalSection. It falls back to spin-and-wait on older kernels.
性能
mormot.core.os
64d1d6db+106-23
core: TOsLightLock uses a futex on Linux
影响
Significantly improves requests-per-second and threading stability on Linux backends. It is now as fast as TLightLock on the uncontended fast path.
4
中
Fixed TOSLightLock fallback on Android and Delphi POSIX
Restores the TRTLCriticalSection fallback for TOSLightLock on platforms without native futex or pthread_mutex support, like Android and Delphi POSIX. The previous commits inadvertently broke this fallback.
修复
mormot.core.os+1
cabcd0ec+41-40
core: another pass of TOsLightLock
影响
Applications running on Android or compiled with Delphi for POSIX will compile and run correctly again. No impact on Windows or FPC Linux.
5
中
Fixed late loading of Windows 8 synchronization API
Moves the runtime loading of API-MS-Win-Core-Synch-l1-2-0.dll to happen after the OS version has been properly populated into OSVersion32.
修复
mormot.core.os
a426a84d+14-14
core: fixed API-MS-Win-Core-Synch-l1-2-0.dll loading
影响
Resolves a bug where the new futex API was not initialized correctly on modern Windows versions because the version check failed at initialization time.
6
中
Fixed potential bounds error in asynchronous connections
Updates TAsyncConnections.ThreadPollingWakeupLocked to check for <= 0 instead of exactly 0 when inspecting spare events.
修复
mormot.net.async
440d9e9d+3-3
net: fixed potential out of range in TAsyncConnections.ThreadPollingWakeupLocked;
影响
Prevents potential out-of-range errors or negative event counters from causing issues in the async polling thread loop.
7
低
Published a raw DoPause procedure
Extracts the CPU pause logic (the pause opcode on x86, yield on ARM) into a globally available DoPause procedure in mormot.core.base.
新功能
mormot.core.base
4cd5cff1+17-2
core: let publish a raw DoPause procedure
影响
Developers can now explicitly call DoPause in custom spin loops to reduce CPU power consumption and cache traffic.
公开 API
DoPauseadded — A cross-platform procedure that invokes CPU pause or yield instructions.
8
低
Moved NextSpin to mormot.core.base
Moves the adaptive spin-wait function NextSpin() and its associated SPIN_FACTOR and SPIN_COUNT constants from mormot.core.os into the lower-level mormot.core.base unit.
内部重构
mormot.core.base+1
268d8600+91-85
core: moved NextSpin() to mormot.core.base
影响
No direct impact on application code. It allows simpler units without OS dependencies to use the adaptive spin logic.
9
低
Refactored TIcuLibrary internal locking fields
Changes the internal locking fields in TIcuLibrary from PtrUInt to cardinal to match the expected types for TLightLock primitives.
内部重构
mormot.core.os
1f1fe8df+17-12
core: fixed TIcuLibrary locking code
影响
No impact on application code, internal refactoring only.
10
低
Updated TOSLightLock usage comments
Updates code comments referencing TOSLightLock across several units to reflect the new Windows 8+ and Linux futex behaviors.
杂项
mormot.core.mvc+3
043d364d+6-6
core: fixed TOSLightLock usage comments in code
影响
No impact on application code, internal refactoring only.