mORMot2 DailyLecture quotidienne des commits upstream

Futex natif pour TOSLightLock et correction d'un interblocage ICU

Les commits du jour font évoluer en profondeur les primitives de synchronisation du cœur de mORMot 2. TOSLightLock s'appuie désormais sur le futex natif sous Linux et sur WaitOnAddress sous Windows 8+, avec un gain attendu en contention. Un interblocage de la bibliothèque ICU est corrigé, et le polling réseau asynchrone gagne un contrôle de borne.

En bref

  • TOSLightLock utilise le futex natif sous Linux et WaitOnAddress sous Windows 8+.
  • TIcuLibrary corrige un interblocage lors de la création d'un convertisseur partagé.
  • TAsyncConnections corrige un dépassement de borne possible dans le polling.
  • Les mécanismes d'attente active sont extraits vers l'unité core base.

Conseil de mise à jour

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.

Build2.4.16618 → 2.4.16628
Commits10
Lignes+404 -312
Lecture2 min

10 sur 10 entrées · 10 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée Interblocage corrigé au chargement des convertisseurs 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. Correctifs mormot.core.os 87dbb9fc+3-3

core: fix deadlock in TIcuLibrary

Impact

Évite les interblocages lorsque plusieurs threads demandent simultanément un convertisseur de texte à la bibliothèque ICU.

Arnaud · 21:44 UTC · voir le commit sur GitHub →

2 Élevée 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. Performance mormot.core.os+3 17a26fa9+106-124

core: TOSLightLock now uses WaitOnAddress/WakeByAddressSingle on Win8+

Impact

Faster lock acquisition on Windows 8 and newer, especially under high contention, by avoiding SRW lock overhead.

Arnaud Bouchez · 19:39 UTC · voir le commit sur GitHub →

3 Élevée 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. Performance mormot.core.os 64d1d6db+106-23

core: TOsLightLock uses a futex on Linux

Impact

Significantly improves requests-per-second and threading stability on Linux backends. It is now as fast as TLightLock on the uncontended fast path.

Arnaud Bouchez · 17:29 UTC · voir le commit sur GitHub →

4 Moyenne 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. Correctifs mormot.core.os+1 cabcd0ec+41-40

core: another pass of TOsLightLock

Impact

Applications running on Android or compiled with Delphi for POSIX will compile and run correctly again. No impact on Windows or FPC Linux.

Arnaud · 22:35 UTC · voir le commit sur GitHub →

5 Moyenne 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. Correctifs mormot.core.os a426a84d+14-14

core: fixed API-MS-Win-Core-Synch-l1-2-0.dll loading

Impact

Resolves a bug where the new futex API was not initialized correctly on modern Windows versions because the version check failed at initialization time.

Arnaud Bouchez · 19:41 UTC · voir le commit sur GitHub →

6 Moyenne Fixed potential bounds error in asynchronous connections Updates TAsyncConnections.ThreadPollingWakeupLocked to check for <= 0 instead of exactly 0 when inspecting spare events. Correctifs mormot.net.async 440d9e9d+3-3

net: fixed potential out of range in TAsyncConnections.ThreadPollingWakeupLocked;

Impact

Prevents potential out-of-range errors or negative event counters from causing issues in the async polling thread loop.

Arnaud Bouchez · 17:33 UTC · voir le commit sur GitHub →

7 Faible 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. Nouveautés mormot.core.base 4cd5cff1+17-2

core: let publish a raw DoPause procedure

Impact

Developers can now explicitly call DoPause in custom spin loops to reduce CPU power consumption and cache traffic.

API publique

  • DoPauseadded — A cross-platform procedure that invokes CPU pause or yield instructions.

Arnaud Bouchez · 17:28 UTC · voir le commit sur GitHub →

8 Faible 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. Sous le capot mormot.core.base+1 268d8600+91-85

core: moved NextSpin() to mormot.core.base

Impact

No direct impact on application code. It allows simpler units without OS dependencies to use the adaptive spin logic.

Arnaud Bouchez · 17:27 UTC · voir le commit sur GitHub →

9 Faible Refactored TIcuLibrary internal locking fields Changes the internal locking fields in TIcuLibrary from PtrUInt to cardinal to match the expected types for TLightLock primitives. Sous le capot mormot.core.os 1f1fe8df+17-12

core: fixed TIcuLibrary locking code

Impact

No impact on application code, internal refactoring only.

Arnaud Bouchez · 19:45 UTC · voir le commit sur GitHub →

10 Faible Updated TOSLightLock usage comments Updates code comments referencing TOSLightLock across several units to reflect the new Windows 8+ and Linux futex behaviors. Entretien mormot.core.mvc+3 043d364d+6-6

core: fixed TOSLightLock usage comments in code

Impact

No impact on application code, internal refactoring only.

Arnaud Bouchez · 17:33 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
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