mORMot2 DailyLecture quotidienne des commits upstream

Le deadlock au démarrage des logs est corrigé, avec TLS 1.3 et POSIX stabilisés

L’échec de création d’un fichier de log pouvait relancer la journalisation via un writer non initialisé et laisser SynLogGlobalLock verrouillé, bloquant ensuite tous les threads de log. Cette édition complète aussi la configuration des suites TLS 1.3, corrige les retours Currency via la répartition d’interfaces sous FPC POSIX et supprime une boucle active avec /dev/null sous systemd. Les appelants POSIX qui utilisent directement WaitReadPending doivent s’adapter à son nouveau résultat entier, et les appelants bas niveau du parser numérique x86-64 doivent vérifier les points d’entrée SSSE3 renommés.

En bref

  • Visez la build 2.4.16922 au commit cdb7dad52a6989d41ce8405a15d26928e0829ca2 ; elle inclut les corrections finales des logs et de l’arrêt Linux.
  • TSynLog ne bloque plus tous les threads de log quand la création du fichier échoue avec la journalisation des exceptions activée.
  • Les backends OpenSSL configurent maintenant TLS 1.3 via TNetTlsContext.CipherSuites et SSL_CTX_set_ciphersuites.
  • La répartition d’interfaces FPC POSIX renvoie maintenant Currency via le chemin x87 FP0 au lieu de le traiter comme un résultat binary64.
  • WaitReadPending renvoie désormais -1, 0 ou 1 sous POSIX ; les appelants directs doivent remplacer l’usage booléen par une comparaison explicite.
  • Les instances THttpRequestContext réutilisées effacent maintenant AcceptEncoding, évitant de transmettre les préférences de compression à la requête suivante.

Conseil de mise à jour

Prenez la build 2.4.16922 au head actuel. Évitez la build 2.4.16907, car sa correction de largeur des allocateurs n’a pas encore la garde nil ajoutée en 16908 ; évitez 2.4.16913, car le parsing des logs zonés est corrigé en 16914 ; et ne vous arrêtez pas sur 2.4.16915, car le binding TLS 1.3 n’est relié à TOpenSslNetTls qu’en 16916. Recompilez chaque cible Delphi/FPC et testez l’échec de création des logs, Currency renvoyé par interface, la négociation TLS 1.3, l’arrêt sous systemd et la réutilisation des contextes HTTP.

Build2.4.16897 → 2.4.16922
Commits26
Lignes+893 -326
Lecture8 min

22 sur 22 entrées · 26 commits upstream

Sujets
# Entrée Catégorie Unités
1 Critique L’échec de création du fichier de log ne fige plus tous les threads TSynLog.LogFileInit sauvegarde les flags du thread courant, active tiExceptionIgnore tant que fWriter n’est pas prêt et restaure les flags dans le bloc finally. Cela empêche les échecs de CreateLogWriter de se journaliser récursivement dans la même instance avant la libération de SynLogGlobalLock. Correctifs mormot.core.log 0165307d+39-0

core: fixed TSynLog deadlock when the log file can't be created

Impact

Avec ptIdentifiedInOneFile et la journalisation des exceptions activée, un chemin de log absent ou non inscriptible ne provoque plus une violation d’accès avant le déverrouillage, qui bloquait tous les autres threads à leur premier appel de log.

Sven Harazim · 17:37 UTC · voir le commit sur GitHub →

2 Élevée Les parsers numériques passent derrière des points d’entrée Pascal et SSSE3 sélectionnables GetExtended passe maintenant par GetExtendedStub, qui sélectionne GetExtendedSsse3 sur les cibles ASMX64NOTPIC compatibles, tandis que GetNumericVariantFromJson passe par GetNumericVariantStub et utilise GetNumericVariantPas par défaut. Les anciens symboles assembleur bas niveau de mormot.core.base sont renommés avec le suffixe Ssse3. Ruptures mormot.core.base+3 acc10bf5+62-21

core: define GetExtended/GetNumericVariantFromJson as stubs

Impact

Les appelants normaux de mormot.core.text.GetExtended et mormot.core.variants.GetNumericVariantFromJson conservent les mêmes signatures. Le code qui nomme directement les déclarations assembleur conditionnelles de mormot.core.base ne compile plus tant qu’il n’utilise pas les nouveaux symboles Ssse3 ou les wrappers publics.

Migration nécessaire

Recherchez les appels qualifiés mormot.core.base.GetExtended et mormot.core.base.GetNumericVariantFromJson ; utilisez les wrappers de mormot.core.text et mormot.core.variants, ou les nouveaux noms Ssse3 si le contrôle SIMD direct est volontaire.

API publique

  • mormot.core.base.GetExtendedrenamed — Le point d’entrée assembleur x86-64 conditionnel devient GetExtendedSsse3 ; le wrapper habituel mormot.core.text.GetExtended reste disponible.
  • mormot.core.base.GetNumericVariantFromJsonrenamed — Le point d’entrée assembleur x86-64 conditionnel devient GetNumericVariantSsse3 ; le wrapper mormot.core.variants reste disponible.
  • TGetExtended / GetExtendedStubadded — Type de fonction public et variable de dispatch pour choisir GetExtendedPas ou GetExtendedSsse3.
  • TGetNumericVariantFromJson / GetNumericVariantStubadded — Type de fonction public et variable de dispatch utilisant GetNumericVariantPas par défaut.

Arnaud Bouchez · 09:52 UTC · voir le commit sur GitHub →

3 Élevée L’entrée systemd ne fait plus tourner ConsoleWaitForEnterKey à plein CPU Sous POSIX, WaitReadPending passe de boolean à integer et mappe poll sur 1 pour une entrée lisible, 0 pour un timeout et -1 pour HUP, ERR ou NVAL. ConsoleWaitForEnterKey attend après un poll invalide ou EOF au lieu de recommencer immédiatement sur /dev/null sous systemd. Ruptures mormot.core.os+1 c2f8bb0f+27-11

core: fixed ConsoleWaitForEnterKey() when run under systemd

Impact

Les services POSIX utilisant ConsoleWaitForEnterKey sous systemd cessent de consommer un cœur lorsque stdin vaut /dev/null. Les appelants externes directs de WaitReadPending subissent un changement de type source-incompatible et doivent comparer le résultat explicitement.

Migration nécessaire

Recherchez les appels WaitReadPending dans le code POSIX ; utilisez > 0 pour une entrée lisible, = 0 pour un timeout et < 0 pour HUP, ERR ou NVAL. Déployez toute la séquence d’arrêt 2.4.16922.

API publique

  • WaitReadPendingsignature-changed — Le résultat POSIX passe de boolean à integer avec les états -1, 0 et 1.

Arnaud Bouchez · 14:00 UTC · voir le commit sur GitHub →

4 Élevée Le binding de limite de pile QuickJS accepte maintenant le runtime La déclaration Pascal publique de JS_SetMaxStackSize remplace son premier paramètre JSContext par JSRuntime, conformément à l’API C de QuickJS. Le symbole externe et la convention cdecl restent inchangés. Ruptures mormot.lib.quickjs 37fa86b4+3-4

lib: fixed JS_SetMaxStackSize() definition

Impact

Le code qui passait un JSContext fournissait le mauvais objet opaque et doit maintenant passer son JSRuntime. Comme les types pointeur sont distincts, les appels Pascal typés devraient révéler l’incompatibilité à la compilation.

Migration nécessaire

Recherchez les appels JS_SetMaxStackSize et remplacez l’argument JSContext par le JSRuntime propriétaire avant de recompiler les intégrations QuickJS.

API publique

  • JS_SetMaxStackSizesignature-changed — Le premier paramètre est JSRuntime au lieu de JSContext.

Arnaud Bouchez · 10:59 UTC · voir le commit sur GitHub →

5 Élevée TLS 1.3 reçoit une liste de suites chiffrées configurable séparément TNetTlsContext reçoit CipherSuites pour TLS 1.3. TOpenSslNetTls.SetupCtx fournit une valeur par défaut selon l’accélération AES, appelle SSL_CTX_set_ciphersuites sauf si DisableTls13 est défini et active la préférence serveur avec l’option OpenSSL de priorité ChaCha selon la configuration. Correctifs mormot.lib.openssl11+1 7eb6b9e5+35-7

net: proper TLS 1.3 support

Impact

Les serveurs et clients OpenSSL peuvent maintenant contrôler les suites TLS 1.3 indépendamment de CipherList pour les versions antérieures. Une politique qui ne définit que CipherList n’implique plus les mêmes noms pour TLS 1.3 ; les déploiements stricts doivent donc définir et tester CipherSuites explicitement.

API publique

  • TNetTlsContext.CipherSuitesadded — Noms de suites TLS 1.3 séparés par des deux-points et passés à SSL_CTX_set_ciphersuites ; non utilisés par SChannel.

Arnaud Bouchez · 13:12 UTC · voir le commit sur GitHub →

6 Élevée Un identifiant de thread finissant par Z ne vide plus les logs parsés TSynLogFile vérifie maintenant LineBeg[fLineLevelOffset - 2] pour le marqueur de timestamp zoné, au lieu de l’octet suivant qui peut appartenir au numéro de thread encodé par Int18ToText. Un test couvre le thread 58 avec et sans ZonedTimestamp. Correctifs mormot.core.log 29b5fb26+38-3

core: fixed TSynLogFile zone layout

Impact

Les lecteurs de logs ne confondent plus l’octet Z d’un identifiant de thread avec le marqueur de fuseau, ce qui décalait le niveau et chargeait le fichier sans événement parsé.

Arnaud Bouchez · 12:22 UTC · voir le commit sur GitHub →

7 Élevée Les appels d’interface FPC POSIX renvoient Currency depuis le bon registre La répartition assembleur de mormot.core.interfaces ne groupe plus imvCurrency avec les résultats flottants Double et DateTime. Sous FPC x86-64 SysV, elle extrait maintenant Currency de x87 ST0 vers TCallMethodArgs.res64 ; les autres ABI conservent le chemin du registre entier. Correctifs mormot.core.interfaces 6a27c07f+9-7

core: fixed currency result in mormot.core.interfaces

Impact

Les backends qui invoquent des méthodes d’interface via ce dispatcher sous FPC POSIX reçoivent maintenant la valeur Currency attendue au lieu de la lire selon une convention de résultat incorrecte. Les chemins Delphi et non-POSIX ne sont pas modifiés.

API publique

  • Currency results through mormot.core.interfacesbehaviour-changed — FPC POSIX x86-64 lit imvCurrency depuis x87 ST0 ; les autres cibles gardent leur convention native.

Arnaud Bouchez · 10:13 UTC · voir le commit sur GitHub →

8 Élevée Les contextes HTTP réutilisés ne conservent plus Accept-Encoding THttpRequestContext.Reset efface maintenant AcceptEncoding avec FastAssignNew, comme UserAgent, Referer et les autres chaînes propres à la requête. L’état de compression est ensuite recalculé depuis la requête suivante plutôt qu’à partir d’un header conservé. Correctifs mormot.net.http 4c990d65+4-2

net: fixed Accept-Encoding issue

Impact

Sur les connexions persistantes ou les contextes mis en pool, une requête sans Accept-Encoding n’hérite plus de la préférence de compression précédente. Cela évite de négocier l’encodage de réponse avec des capacités client obsolètes.

API publique

  • THttpRequestContext.Resetbehaviour-changed — Reset efface maintenant AcceptEncoding entre les requêtes.

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

9 Élevée DoubleToAscii initialise son indicateur de génération fractionnaire DoubleToAscii met sa variable locale fl à zéro avant de générer les chiffres fractionnaires. Auparavant, seule la variable sticky propre à CPU32 était initialisée à cet endroit, laissant fl dépendre du contenu non initialisé de la pile. Correctifs mormot.core.text 45ff2b23+3-2

core: fixed uninitialized flag in DoubleToAscii()

Impact

Le formatage texte des flottants ne laisse plus un flag non initialisé influencer le chemin des chiffres fractionnaires. Cela concerne les backends Delphi et FPC qui utilisent cette implémentation Pascal, y compris la sérialisation JSON ou texte basée sur DoubleToAscii.

Arnaud Bouchez · 14:56 UTC · voir le commit sur GitHub →

10 Moyenne Les wrappers d’allocation statique utilisent des tailles de pointeur Les wrappers pas_malloc, pas_realloc et pas_malloc_usable_size de QuickJS et des bibliothèques statiques passent de longueurs integer ou cardinal 32 bits à des types PtrUInt compatibles avec size_t. pas_calloc refuse aussi le débordement de n × size avant AllocMem. Correctifs mormot.lib.quickjs+1 66d7d51c+31-28

lib: fixed pas_malloc() wrapper definition

Impact

Les bindings statiques FPC et Delphi correspondent maintenant à l’ABI native size_t sur les cibles 64 bits et refusent les tailles calloc débordées. La build 16907 ne doit pas être utilisée seule, car son wrapper FPC de taille utile reçoit une garde nil en 16908.

Arnaud Bouchez · 11:16 UTC · voir le commit sur GitHub →

11 Moyenne L’arrêt de la console évite les attentes après terminaison ConsoleWaitForEnterKey vérifie maintenant SynDaemonTerminated avant l’attente après un échec de poll, avant la lecture de stdin et après EOF. La modification OpenSSL du même commit ne fait que préciser le commentaire de SSL_OP_PRIORITIZE_CHACHA. Correctifs mormot.core.os.posix+1 be7dfd60+20-16

core: tuned ConsoleWaitForEnterKey() shutdown

Impact

Les processus console POSIX peuvent quitter rapidement la boucle de fallback /dev/null dès qu’un signal de terminaison est enregistré. Aucun changement d’API publique au-delà de la modification précédente de WaitReadPending.

Arnaud Bouchez · 14:16 UTC · voir le commit sur GitHub →

12 Moyenne La taille d’allocation accepte nil et les benchmarks numériques sont corrigés pas_malloc_usable_size n’appelle maintenant FPC MemSize que pour un pointeur non nil et renvoie zéro sinon, comme l’attend le fallback QuickJS. Le benchmark numérique cesse aussi d’ajouter un zéro après les formes exponentielles en testant correctement la classe d’entrée générée. Correctifs mormot.lib.static c54910c3+9-8

test: fixed number benchmark values generation

Impact

Le code d’allocation QuickJS sous FPC peut demander la taille d’une allocation nil inconnue sans passer nil à MemSize. Le comportement applicatif ne change pas autrement ; la seconde partie ne répare que la génération des données de test.

Arnaud Bouchez · 11:26 UTC · voir le commit sur GitHub →

13 Moyenne Les recherches LDAP annulées libèrent leur état de plage avant de revenir TLdapClient.SearchAllDocRaw libère maintenant fSearchRange quand fAborted est détecté, après avoir effacé le flag d’annulation et avant de renvoyer false, au lieu de laisser l’objet de plage de pagination actif sur ce chemin. Correctifs mormot.net.ldap 7fdb36cb+2-0

ldap - Fix exception if searchalldocraw aborted

Impact

Les clients LDAP qui annulent SearchAllDocRaw pendant la récupération d’attributs par plages ne conservent plus un état de plage obsolète susceptible de lever une exception au nettoyage ou au traitement suivant.

Thomas Prud'homme · 08:55 UTC · voir le commit sur GitHub →

14 Moyenne Les signaux de terminaison POSIX réveillent les futex Linux Après avoir affecté SynDaemonTerminated, SynDaemonSignal appelle OsWakeAllOnValue lorsqu’il est disponible. La documentation de la variable publique montre maintenant comment le code Linux peut attendre sur son adresse avec OsWaitOnValue. Nouveautés mormot.core.os+1 7000cacc+7-2

core: SynDaemonTerminated can be notified by Linux futex

Impact

Les threads Linux bloqués sur la valeur de terminaison peuvent se réveiller immédiatement lors de SIGQUIT, SIGTERM ou SIGINT au lieu d’attendre un intervalle de polling. Les autres cibles POSIX conservent leur comportement.

API publique

  • SynDaemonTerminatedbehaviour-changed — L’affectation par signal réveille maintenant les attentes OsWaitOnValue sous Linux.

Arnaud Bouchez · 14:53 UTC · voir le commit sur GitHub →

15 Moyenne L’attente console partage le futex de terminaison du daemon Un nouveau helper interne WaitForDaemonTermination attend jusqu’à une seconde sur SynDaemonTerminated via OsWaitOnValue lorsqu’il est disponible, sinon il dort. ConsoleWaitForEnterKey l’utilise après les erreurs de poll et EOF, et la documentation avertit que les affectations directes doivent aussi réveiller les attentes. Performance mormot.core.os+1 7e0e8d16+28-18

core: ConsoleWaitForEnterKey() use our shutdown futex

Impact

Les services console Linux répondent à la terminaison du daemon sans boucle fondée uniquement sur sleep, tout en évitant la boucle CPU de /dev/null sous systemd. Le code qui affecte SynDaemonTerminated manuellement doit respecter l’obligation de réveil documentée.

Arnaud Bouchez · 15:08 UTC · voir le commit sur GitHub →

16 Faible Le loader OpenSSL expose la fonction de suites TLS 1.3 mormot.lib.openssl11 ajoute SSL_CTX_set_ciphersuites aux API directe et dynamique, charge le symbole comme optionnel et renvoie un succès si OpenSSL 1.1.0 ne le fournit pas. Les alias d’options DTLS sont aussi complétés jusqu’à SSL_OP_NO_DTLSv1_3. Nouveautés mormot.lib.openssl11 02bcae4a+53-32

lib: SSL_CTX_set_ciphersuites() support

Impact

Le binding peut configurer les suites TLS 1.3 sur les versions OpenSSL qui exportent la fonction sans casser le chargement des anciennes 1.1.0. TOpenSslNetTls ne l’appelle qu’à la build suivante.

API publique

  • SSL_CTX_set_ciphersuitesadded — Binding OpenSSL optionnel pour la liste des suites TLS 1.3.

Arnaud Bouchez · 13:11 UTC · voir le commit sur GitHub →

17 Faible Un switch de build peut forcer le parsing JSON SSSE3 Lorsque FORCE_SSSE3_JSON et ASMX64NOTPIC sont définis et que cpuSSSE3 est disponible, l’initialisation affecte GetNumericVariantStub à GetNumericVariantSsse3. Sans ce conditionnel, le stub continue d’utiliser GetNumericVariantPas, plus rapide dans les tests JSON courants. Nouveautés mormot.core.base.asmx64+1 e1036ba5+23-16

core: new FORCE_SSSE3_JSON conditional

Impact

Le comportement Delphi/FPC par défaut ne change pas. Les équipes peuvent activer le parser JSON SSSE3 à la compilation pour leur charge, mais le commit ne revendique aucun gain universel.

À regarder

N’activez FORCE_SSSE3_JSON qu’après avoir mesuré des longueurs de nombres JSON représentatives sur chaque cible compilateur x86-64.

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

18 Faible Les nombres scientifiques courts évitent le chemin général de réduction SSSE3 Les implémentations x86-64 de GetExtended et GetNumericVariantFromJson ajoutent des chemins de conversion directs pour les entiers à un ou deux chiffres, y compris des formes comme 1E2 et 10E2, avant le code de réduction SIMD plus général. Performance mormot.core.base.asmx64 d6709b01+76-45

core: direct 1/2 digit xEy xxEy patterns for x64 SSSE3 asm

Impact

Les tokens numériques courts courants exécutent moins d’étapes assembleur sur les cibles x86-64 SSSE3. Les signatures publiques et les valeurs parsées sont inchangées, et les autres backends Delphi/FPC conservent leurs chemins.

Arnaud Bouchez · 07:40 UTC · voir le commit sur GitHub →

19 Faible Les workers de daemon Linux attendent la terminaison sans polling RunUntilSigTerminated conserve le polling CheckSynchronize sur le thread principal, mais un thread FPC Linux secondaire attend maintenant indéfiniment avec OsWaitOnValue si futex est disponible. Les autres chemins gardent la boucle d’attente de 100 ms. Performance mormot.core.os.posix 9247be3c+10-5

core: RunUntilSigTerminated() use an INFINITE futex on Linux

Impact

Un daemon exécutant cette boucle sur un worker n’effectue plus de réveils périodiques et est libéré par le réveil du handler de signal ajouté précédemment. La synchronisation du thread principal et les backends non Linux sont inchangés.

API publique

  • RunUntilSigTerminatedbehaviour-changed — Les appelants FPC Linux hors thread principal utilisent une attente futex infinie si elle est disponible.

Arnaud Bouchez · 14:56 UTC · voir le commit sur GitHub →

20 Faible Les lecteurs de texte mappé et de logs utilisent un pointeur de ligne local TMemoryMapText.GetLine, GetString, LineContains, LineSize et LineSizeSmallerThan mettent fLines[aIndex] dans un pointeur local avant de calculer les limites. TSynLogFile applique le même modèle, simplifie les longueurs de GetEventText et étend les tests de lignes mappées. Sous le capot mormot.core.buffers+2 d73cd49e+55-35

core: refactored TSynLogFile/TMemoryMapText

Impact

Les signatures publiques restent inchangées. Les applications Delphi/FPC ne voient qu’un nettoyage interne de la lecture des lignes, mais doivent aussi prendre la build suivante, car la détection du layout zoné est corrigée en 2.4.16914.

Arnaud Bouchez · 12:14 UTC · voir le commit sur GitHub →

21 Faible Les benchmarks numériques couvrent plus de formes et les deux API de parsing TTestCoreBase élargit les entrées générées des décimales simples aux entiers courts, fractions longues et formes exponentielles, puis mesure et compare GetExtended et GetNumericVariantFromJson. Les modifications assembleur ne corrigent que des commentaires. Tests mormot.core.base.asmx64 3b77a2fe+96-42

tests: enhance performance tests

Impact

Aucun comportement backend ni API publique ne change. Le banc de performance élargi fournit davantage de données pour les futurs choix et optimisations du parser.

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

22 Faible La notation scientifique rejoint la matrice de régression numérique x86-64 Les tests numériques passent maintenant la sortie de DoubleToString dans GetExtended et GetNumericVariantFromJson, et ajoutent des mantisses positives et négatives à un ou deux chiffres avec exposants. Tests 5f5bd051+25-4

tests: enhanced x64 asm numbers coverage

Impact

Aucun comportement applicatif ne change. Les nouvelles assertions protègent les chemins assembleur de notation scientifique courte contre les régressions de valeur et de pointeur final.

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