Agir maintenantpeut affecter un système en productionLe payload brut contient quatre commits de merge et 22 commits non-merge ; chacun des commits non-merge est couvert ci-dessous. Il ne contient ni marqueur superseded_by ni avis de dépréciation. Les trois plages à éviter proviennent de corrections ou d’achèvements explicites plus tard dans la même séquence de builds intégrée.
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.
22 sur 22 entrées · 26 commits upstream
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.
Mise à jour recommandée
Mettez à niveau les déploiements de logs vers la build 2.4.16922 et testez le démarrage avec un répertoire volontairement non inscriptible pendant que plusieurs threads écrivent leur premier message.
Unités
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.
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.
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.
Unités
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.
Mise à jour recommandée
Passez à la build 2.4.16916 ou ultérieure, définissez TNetTlsContext.CipherSuites si la politique est explicite et vérifiez séparément les handshakes TLS 1.2 et TLS 1.3.
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.
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é.
Mise à jour recommandée
Utilisez la build 2.4.16914 ou ultérieure pour les lecteurs de logs et retestez le parsing sans ZonedTimestamp avec des identifiants de thread élevés.
Unités
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.
Mise à jour recommandée
Mettez à niveau les services FPC POSIX qui renvoient Currency via mormot.core.interfaces et ajoutez un test de valeur exacte pour chaque ABI CPU prise en charge.
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.
Unités
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.
Mise à jour recommandée
Mettez à niveau les serveurs HTTP qui réutilisent THttpRequestContext et testez deux requêtes successives avec puis sans Accept-Encoding sur la même connexion.
API publique
THttpRequestContext.Resetbehaviour-changed — Reset efface maintenant AcceptEncoding entre les requêtes.
Unités
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.
Mise à jour recommandée
Mettez à niveau les charges de sérialisation numérique et relancez les tests déterministes DoubleToAscii et JSON aller-retour sur chaque compilateur et cible CPU.
Unités
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.
Mise à jour recommandée
Prenez ce changement avec la build 2.4.16908 et relancez les tests d’allocation QuickJS et de compression statique sous Delphi et FPC 64 bits.
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.
Mise à jour recommandée
Prenez ce changement dans toute la séquence d’arrêt Linux 2.4.16922 plutôt que de vous arrêter à la première correction CPU systemd.
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.
Mise à jour recommandée
Utilisez la build 2.4.16908 ou ultérieure au lieu de vous arrêter sur le commit précédent des wrappers d’allocation.
Unités
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.
Mise à jour recommandée
Mettez à niveau si les recherches LDAP utilisent SearchAllAbort ou des attributs par plages, puis retestez l’annulation et la réutilisation immédiate du client.
Unités
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.
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.
Mise à jour recommandée
Déployez toute la séquence de la build 2.4.16922 et auditez les affectations directes de SynDaemonTerminated afin d’appeler OsWakeAllOnValue comme documenté.
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.
Unités
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.
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.
Unités
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.
Unités
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.
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.
Unités
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.