Agir maintenantpeut affecter un système en productionLes deux commits de fusion n’exigent pas d’entrée individuelle. La fusion #554 introduit THttpServerRequestAbstract.SetOutStream et la gestion de propriété/range ; la fusion #572 apporte l’initialisation paresseuse HTTP API WebSocket examinée dans son commit non-merge. Les fichiers de version ont été ignorés.
Le nettoyage de fin de thread devient automatique et change les callbacks
La fin des threads est désormais centralisée dans TThreadAbstract, avec des signatures de callbacks et de méthodes REST/ORM incompatibles au niveau source pour les applications qui les redéfinissent ou les affectent. Un correctif séparé empêche TWebSocketProtocol.SetEncryptKey de désactiver silencieusement le chiffrement lorsque aSettings vaut nil. Le démarrage des WebSockets HTTP API sous Windows, plusieurs caches partagés et des déclencheurs de nettoyage périodique reçoivent aussi des corrections de concurrence, tandis qu’une fonctionnalité fusionnée permet aux gestionnaires HTTP de diffuser un corps depuis TStream.
En bref
- TOnNotifyThread reçoit maintenant TThreadAbstract, TSynLogFamily.OnThreadEnded est supprimé et les méthodes virtuelles REST/ORM associées utilisent TThreadAbstract.
- TWebSocketProtocol.SetEncryptKey conserve maintenant le chiffrement avec une clé non vide et aSettings = nil.
- L’initialisation HTTP API WebSocket est paresseuse et sérialisée ; Wine évite explicitement les chemins websocket.dll et http.sys incomplets.
- Les gestionnaires HTTP peuvent renvoyer un TStream via SetOutStream ; les serveurs socket le diffusent, tandis que http.sys et REST-over-WebSockets le mettent en mémoire dans les limites documentées.
- Des corrections CAS et de verrouillage évitent les travaux en double pour l’inactivité, les sessions et les purges de caches ou de connexions.
Conseil de mise à jour
Prenez la build 2.4.16737 si vous utilisez le chiffrement WebSocket avec un pointeur de paramètres nil, les WebSockets HTTP API sous Windows ou les caches partagés concernés. Recompilez les callbacks de thread et descendants REST/ORM personnalisés : TOnNotifyThread et plusieurs méthodes virtuelles exigent maintenant TThreadAbstract. Les appels directs à LockedGet32 doivent devenir LockedReset32. Le payload brut ne signale aucun successeur ultérieur dans cette édition.
33 sur 33 entrées · 35 commits upstream
1
Élevée
Les hooks de thread REST et ORM exigent maintenant TThreadAbstract
Les déclarations publiques BeginCurrentThread, EndCurrentThread, OnBeginCurrentThread, OnEndCurrentThread, HttpThreadStart et HttpThreadTerminate dans mormot.rest.core, mormot.rest.server, mormot.rest.http.server et mormot.orm utilisent TThreadAbstract au lieu de TThread. Le nettoyage explicite via la famille de logs est supprimé.
Ruptures
mormot.orm.core+5
69869f49+33-36
rest/orm: use TOnNotifyThread new definition
Impact
Les descendants personnalisés qui redéfinissent ces méthodes virtuelles et les méthodes affectées aux hooks peuvent ne plus compiler avant de remplacer Sender par TThreadAbstract. Le nettoyage à l’exécution vient ensuite de la nouvelle classe de base.
Migration nécessaire
Recherchez les redéfinitions et callbacks BeginCurrentThread, EndCurrentThread, OnBeginCurrentThread, OnEndCurrentThread, HttpThreadStart et HttpThreadTerminate ; remplacez Sender: TThread par Sender: TThreadAbstract puis recompilez.
API publique
TRest.BeginCurrentThread / TRest.EndCurrentThreadsignature-changed — Sender passe de TThread à TThreadAbstract.TRestOrmParent.BeginCurrentThread / TRestOrmParent.EndCurrentThreadsignature-changed — Sender passe de TThread à TThreadAbstract.
2
Élevée
TOnNotifyThread est restreint et le callback de famille de logs supprimé
mormot.core.threads change TOnNotifyThread de procedure(Sender: TThread) en procedure(Sender: TThreadAbstract). TThreadAbstract.OnThreadEnded est ajouté, mormot.core.log supprime TSynLogFamily.OnThreadEnded et le nettoyage de TLoggedThread quitte son propre DoTerminate.
Ruptures
mormot.core.log+1
f1f8d766+12-13
core: breaking change of TSynLogFamily.OnThreadEnded into TThreadAbstract
Impact
Les méthodes callback déclarées avec Sender: TThread ne sont plus compatibles avec TOnNotifyThread, et les références directes à TSynLogFamily.OnThreadEnded ne compilent plus. Une migration source est nécessaire en Delphi comme en FPC.
Migration nécessaire
Recherchez les affectations TOnNotifyThread et handlers Sender: TThread, passez-les à Sender: TThreadAbstract et remplacez TSynLogFamily.OnThreadEnded par TThreadAbstract.OnThreadEnded ou le nettoyage automatique de TThreadAbstract.
API publique
TOnNotifyThreadsignature-changed — Sender est désormais TThreadAbstract au lieu de TThread.TSynLogFamily.OnThreadEndedremoved — Le nettoyage passe dans TThreadAbstract.TThreadAbstract.OnThreadEndedadded — Wrapper de TSynLog.NotifyThreadEnded avec le nouveau type de callback.
3
Élevée
LockedGet32 est renommé et peut poser atomiquement tout entier
mormot.core.base remplace la fonction publique LockedGet32(Target) par LockedReset32(Target, New), avec New valant zéro par défaut. mormot.net.async adapte les deux appels des compteurs de réveil.
Ruptures
mormot.core.base+1
bcf834a5+9-9
core: new LockedReset32() wrapper function
Impact
Le code appelant directement LockedGet32 ne compile plus. LockedReset32 sans second argument conserve l’échange avec zéro ; le nouveau paramètre accepte aussi une autre valeur de remplacement.
Migration nécessaire
Recherchez LockedGet32 et renommez chaque appel en LockedReset32 ; passez New seulement si une valeur autre que zéro est nécessaire.
API publique
LockedGet32removed — Remplacée par LockedReset32.LockedReset32added — Retourne atomiquement Target^ et le remplace par New, zéro par défaut.
4
Élevée
Un pointeur de paramètres WebSocket nil ne désactive plus le chiffrement
TWebSocketProtocol.SetEncryptKey dans mormot.net.ws.core ne sort plus que pour une clé vide, et non pour aSettings nil. Sans paramètres, il essaie le fichier ECDHE par défaut, puis la syntaxe complète, puis dérive une clé legacy Sha256Weak pour AES-CTR-128.
Sécurité
mormot.net.ws.core
57660dac+18-11
net: fixed TWebSocketProtocol.SetEncryptKey() with aSettings = nil
Impact
Auparavant, une clé non vide avec aSettings nil effaçait fEncryption puis sortait, laissant silencieusement le protocole non chiffré. Le même appel établit maintenant le chiffrement avec les valeurs de compatibilité documentées.
Mise à jour recommandée
Mettez à niveau tout endpoint appelant SetEncryptKey avec une clé non vide et des paramètres nil, puis vérifiez que les deux pairs négocient le chiffrement attendu. Préférez des paramètres PBKDF2 explicites pour les nouveaux mots de passe.
API publique
TWebSocketProtocol.SetEncryptKeybehaviour-changed — aSettings nil choisit maintenant des valeurs de compatibilité au lieu de désactiver le chiffrement.
Unités
5
Élevée
La construction HTTP API WebSocket initialise websocket.dll sûrement
THttpApiWebSocketServer.Create dans mormot.net.server appelle WebSocketApiInitialize avant de tester WebSocketApi.WebSocketEnabled. mormot.lib.winhttp charge la DLL et lie ses exports sous le verrou global réentrant ; de nouveaux tests couvrent le constructeur en premier et 16 threads concurrents.
Correctifs
mormot.lib.winhttp+1
41dbfbba+211-18
fix: initialize HTTP API WebSockets lazily
Impact
Un serveur HTTP API WebSocket sous Windows peut être le premier utilisateur de l’API sans lever à tort « not supported », et un premier usage concurrent ne voit pas de pointeurs de fonctions partiellement liés.
Mise à jour recommandée
Mettez à niveau les services Windows qui construisent THttpApiWebSocketServer avant tout client WebSocket WinHTTP.
API publique
THttpApiWebSocketServer.Createbehaviour-changed — Initialise paresseusement l’API WebSocket avant de tester sa disponibilité.
6
Moyenne
Le nettoyage final empêche un ancien résultat de cache de l’emporter
Dans mormot.core.os, TCachedValue.Cache ne conserve le résultat d’un callback lent que si TixShr correspond encore au tick réservé avant l’appel. Le commit utilise aussi VCardinal pour TSynDictionary et simplifie du code équivalent dans mormot.rest.server, avec des commentaires dans les autres unités.
Correctifs
mormot.core.json+4
14d901e8+16-16
all: some refactoring after today's commits
Impact
Des appels concurrents ne peuvent plus laisser un calcul ancien et lent écraser une valeur de cache plus récente. Ce commit ne change aucune API pour le code Delphi/FPC existant.
Mise à jour recommandée
Prenez cette build finale si votre code utilise TCachedValue depuis plusieurs threads.
7
Moyenne
Le cache d’horodatage REST gagne un rafraîchissement atomique
TRest.GetServerTimestamp dans mormot.rest.core utilise LockedExc32 pour choisir un seul rafraîchissement par tranche de 512 ms. Un TLightLock protège désormais les lectures et écritures du TTimeLogBits mis en cache.
Correctifs
mormot.rest.core
ad1dcbf5+18-12
rest: made TRest.GetServerTimestamp atomic
Impact
Les requêtes REST parallèles lisent un horodatage cohérent, notamment en Delphi/FPC 32 bits où une valeur 64 bits n’est pas naturellement atomique. Aucune API applicative ne change.
Mise à jour recommandée
Mettez à niveau si une même instance TRest sert des requêtes concurrentes sur une cible 32 bits.
Unités
8
Moyenne
Les slots de thread recyclés réinitialisent tout leur état local
TSynLog.NotifyThreadEnded dans mormot.core.log efface maintenant ThreadNumber comme marqueur de recyclage unique, tandis que InitThreadNumber remet RecursionCount et Flags à zéro avant de réaffecter un slot. ThreadBitLo reste le marqueur d’initialisation paresseuse.
Correctifs
mormot.core.log
35d353c9+13-9
core: fixed TSynLog.NotifyThreadEnded threads recycling
Impact
Les threads courts qui réutilisent des slots TSynLog n’héritent plus du niveau de récursion ni des drapeaux d’un thread précédent. Cela évite une suppression silencieuse du journal ou un comportement périmé.
Mise à jour recommandée
Mettez à niveau les services qui créent et détruisent beaucoup de threads journalisés ou personnalisent les drapeaux TSynLog par thread.
Unités
9
Moyenne
Le rafraîchissement keytab Kerberos est sérialisé hors du verrou long
TServerSspiKeyTab.TryRefresh dans mormot.lib.gssapi utilise fSafe pour réserver chaque fenêtre de deux secondes, puis appelle SetKeyTab hors verrou. Le tick est décalé de un afin que la première fenêtre ne soit pas confondue avec le zéro initial.
Correctifs
mormot.lib.gssapi
6f53f3d7+14-7
lib: optimized TServerSspiKeyTab.TryRefresh thread safety
Impact
Les authentifications SSPI/GSSAPI concurrentes ne rechargent plus le même keytab ensemble, et les autres appels n’attendent pas sous verrou pendant la lecture du fichier. Les API publiques ne changent pas.
Mise à jour recommandée
Mettez à niveau les serveurs Kerberos qui rafraîchissent un keytab sous charge concurrente.
Unités
10
Moyenne
La DLL WebSocket n’est testée qu’une fois et désactivée sous Wine
TWebSocketApi gagne un drapeau Tested dans mormot.lib.winhttp. WebSocketApiInitialize mémorise la première tentative sous verrou global, évite les chargements échoués répétés et sort immédiatement sous Wine, dont websocket.dll n’expose que des stubs partiels.
Correctifs
mormot.lib.winhttp
2f0cdace+14-6
lib: fixed WebSocketApiInitialize
Impact
Les environnements Windows non pris en charge cessent de tester la DLL à répétition, et Wine n’est plus considéré compatible à cause de simples exports factices. Les systèmes natifs compatibles s’initialisent une fois.
Mise à jour recommandée
Prenez ce correctif avec l’initialisation paresseuse et wsWeakHttpSys pour les déploiements Windows ou Wine.
API publique
TWebSocketApi.Testedadded — Mémorise que la disponibilité de websocket.dll a déjà été testée.
Unités
11
Moyenne
Les requêtes REST concurrentes ne déclenchent plus OnIdle ensemble
TRestServer.Uri dans mormot.rest.server remplace le test lecture-écriture de fOnIdleLastTix par un compare-and-swap LockedExc32. Seule la requête qui avance le tick appelle OnIdle.
Correctifs
mormot.rest.server
7df2308e+8-8
rest: fixed TRestServer.OnIdle trigger
Impact
Les gestionnaires OnIdle ne sont plus appelés simultanément parce que plusieurs requêtes finissent au même tick. Les backends avec un travail d’inactivité non réentrant évitent doublons et courses.
Mise à jour recommandée
Mettez à niveau si TRestServer.OnIdle effectue une maintenance avec état ou non réentrante.
API publique
TRestServer.OnIdlebehaviour-changed — Une seule requête au plus l’appelle pour un tick donné.
Unités
12
Moyenne
Le compare-and-swap du cache horaire n’alias plus sa valeur attendue
FromGlobalTime dans mormot.core.datetime copie GlobalTime.clock dans la variable locale c et fournit cette valeur attendue stable à LockedExc32. L’ancien appel utilisait clock comme cible et comme valeur attendue.
Correctifs
mormot.core.datetime
f7cfb5db+8-5
core: fixed FromGlobalTime() atomicity
Impact
Le formatage concurrent de l’heure dispose maintenant d’une élection CAS définie avant la mise à jour du cache partagé de 16 ms. Les appels Delphi/FPC gardent la même signature et précision.
Mise à jour recommandée
Mettez à niveau les serveurs multithreads qui formatent fréquemment des horodatages globaux ou locaux.
Unités
13
Moyenne
TLoggedThread libère son état même sans avoir écrit de journal
TLoggedThread.DoTerminate dans mormot.core.threads supprime la sortie anticipée lorsque fLog vaut nil et appelle toujours TSynLog.NotifyThreadEnded après inherited DoTerminate, puis efface fLog.
Correctifs
mormot.core.threads
2c03b28a+3-5
core: fixed TLoggedThread.DoTerminate
Impact
Un TLoggedThread ayant obtenu des métadonnées locales sans écrire d’entrée rend maintenant correctement son slot. Les services longs évitent l’épuisement progressif du registre des threads de journalisation.
Mise à jour recommandée
Mettez à niveau les services avec beaucoup de TLoggedThread courts, y compris ceux qui finissent sans journaliser.
Unités
14
Moyenne
Les workers tunnel préconnectés démarrent avec un résultat réseau valide
TTunnelLocalThread.DoExecute dans mormot.net.tunnel affecte res := nrOk lorsque la connexion socket a déjà été créée par le thread principal, avant fState := stProcessing. Cette branche laissait auparavant res non initialisé ou périmé.
Correctifs
mormot.net.tunnel
677a3579+5-2
net: fixed TTunnelLocalThread process
Impact
Les sessions tunnel dont le socket est connecté dans le thread principal n’emportent plus un résultat réseau indéfini vers la gestion des erreurs ou de fermeture. Le workflow et les signatures restent identiques.
Mise à jour recommandée
Mettez à niveau les déploiements utilisant TTunnelLocalThread avec connexion du socket dans le thread principal.
Unités
15
Moyenne
TCachedValue réserve le rafraîchissement avant de libérer son verrou
TCachedValue.Cache dans mormot.core.os déplace l’affectation Tix32 sous Safe avant d’exécuter le callback lent Call hors verrou. Le rafraîchissement est ainsi réservé avant l’entrée d’un autre thread.
Correctifs
mormot.core.os
84ab9449+3-3
core: fixed race in TCachedValue.Cache
Impact
Plusieurs appels ne lancent plus le même calcul coûteux durant un intervalle. Le commit ultérieur 14d901e empêche aussi un ancien calcul retardé d’écraser un résultat plus récent.
Mise à jour recommandée
Utilisez la tête de l’édition plutôt que de vous arrêter ici, car 14d901e complète la protection du cache concurrent.
Unités
16
Moyenne
TThreadAbstract nettoie désormais toujours le journal en fin de thread
TThreadAbstract.DoTerminate dans mormot.core.threads appelle maintenant TSynLog.NotifyThreadEnded après la terminaison héritée et la mise à jour legacy de Finished, en absorbant les exceptions de fermeture. Les queues et timers retirent leurs callbacks explicites ; le TThread autonome de flush garde un appel manuel.
Nouveautés
mormot.core.log+2
8ef4ae1b+30-35
core: TThreadAbstract calls TSynLog.NotifyThreadEnded
Impact
Tout descendant qui atteint correctement inherited DoTerminate libère automatiquement son état de journalisation par thread. Les descendants directs de TThread utilisant TSynLog doivent encore appeler TSynLog.NotifyThreadEnded.
À regarder
API publique
TThreadAbstract.DoTerminatebehaviour-changed — Appelle automatiquement TSynLog.NotifyThreadEnded à la fermeture du thread.
17
Moyenne
TThreadAbstract expose Finished aussi sous Delphi 7 et 2007
mormot.core.threads ajoute à TThreadAbstract une propriété publique Finished émulée et fFinished lorsque le RTL ne les fournit pas, puis pose le drapeau dans DoTerminate. TLoggedThread.ExecuteDone est supprimé et mormot.net.tftp.server utilise Finished.
Compilateur & plateforme
mormot.core.threads+1
5678b9d9+31-13
core: emulate TThread.Finished property on Delphi 7/2007
Impact
Les anciens Delphi peuvent tester TThreadAbstract.Finished comme Delphi moderne et FPC. Le code qui référençait la propriété publique TLoggedThread.ExecuteDone doit passer à Finished.
Migration nécessaire
Recherchez TLoggedThread.ExecuteDone et remplacez-le par la propriété héritée Finished.
API publique
TThreadAbstract.Finishedadded — Émulée pour Delphi 7/2007 ; déjà fournie par les RTL récents.TLoggedThread.ExecuteDoneremoved — Utiliser Finished à la place.
18
Moyenne
Wine reçoit un indicateur explicite de faiblesse de http.sys
mormot.core.os ajoute wsWeakHttpSys à TWindowsSpecs et l’active lors de la détection de Wine. TRestHttpServer.Create dans mormot.rest.http.server utilise ce drapeau pour remplacer HTTP_API_MODES par useHttpAsync.
Compilateur & plateforme
mormot.core.os+3
b4238a29+10-8
net: introducing wsWeakHttpSys flag
Impact
Les serveurs REST sous Wine n’utilisent plus une implémentation http.sys incomplète et passent au serveur socket asynchrone. Le comportement sous Windows natif ne change pas.
Mise à jour recommandée
Mettez à niveau les déploiements Wine demandant un mode HTTP API et vérifiez le fallback useHttpAsync dans le journal.
API publique
TWindowsSpecs.wsWeakHttpSysadded — Marque les environnements où http.sys ne doit pas être choisi.
19
Moyenne
Les workers HTTP API WebSocket suivent le nouveau type de callback
mormot.net.server fait accepter TThreadAbstract à TSynThreadPoolHttpApiWebSocketServer.OnThreadStart et OnThreadTerminate. TSynWebSocketGuard hérite maintenant de TThreadAbstract et supprime son appel manuel à TSynLog.NotifyThreadEnded.
Compilateur & plateforme
mormot.net.server
f115b536+7-8
net: follow new TThreadAbstract / TOnNotifyThread definitions
Impact
Les workers et gardes WebSocket compilent avec le nouveau contrat TOnNotifyThread et bénéficient du nettoyage automatique. Les descendants personnalisés redéfinissant les callbacks protégés peuvent devoir adapter leur signature.
À regarder
Unités
20
Faible
Les scans d’expiration du dictionnaire gagnent une barrière atomique
TSynDictionary.DeleteDeprecated dans mormot.core.json lit le tick partagé via la nouvelle vue TSynVarData.VCardinal et réserve le scan avec LockedExc32. mormot.core.base ajoute ce champ de record variant pour l’accès atomique.
Performance
mormot.core.base+1
c7887dc9+35-33
core: ensure TSynDictionary.DeleteDeprecated trigger is atomic
Impact
Les utilisateurs concurrents du dictionnaire évitent les scans d’expiration en double durant la même seconde. Le comportement de TSynDictionary est conservé ; le code inspectant TSynVarData peut utiliser la nouvelle vue non signée.
API publique
TSynVarData.VCardinaladded — Vue non signée 32 bits du record variant.
21
Faible
Un seul scan d’expiration du pool est élu par intervalle
TSqlDBConnectionPropertiesThreadSafe.ThreadSafeConnection dans mormot.db.sql remplace l’affectation non synchronisée du timestamp par LockedExc32 avant DeleteDeprecated. ClearConnectionPool réinitialise atomiquement le déclencheur.
Performance
mormot.db.sql
a6d76aa9+12-9
db: use CAS for TSqlDBConnectionPropertiesThreadSafe.DeleteDeprecated
Impact
Sous charge SQL concurrente, un seul thread effectue le scan optionnel des connexions expirées toutes les 32 secondes. Le comportement du backend et les API publiques restent inchangés.
Unités
22
Faible
La purge du cache MVC ne s’exécute qu’une fois par seconde
Le traitement TMvcRunWithViews dans mormot.core.mvc réserve maintenant fOnIdlePurgeCacheTix32 via LockedExc32 avant PurgeMethodCache. PurgeMethodCache n’affecte plus ce tick lui-même.
Performance
mormot.core.mvc
83f4846b+6-5
mvc: atomic TMvcRunWithViews.PurgeMethodCache
Impact
Les requêtes MVC concurrentes évitent plusieurs scans complets du cache durant la même seconde. Les résultats et API MVC visibles par l’application gardent le même comportement.
Unités
23
Faible
Une requête par intervalle purge les sessions REST expirées
TRestServerUriContext.Authenticate dans mormot.rest.server avance fSessionsDeprecatedTix avec LockedExc32 avant SessionDeleteDeprecated. La routine de purge ne fait plus d’affectation non atomique séparée.
Performance
mormot.rest.server
14d5a05d+6-5
rest: use a CAS trigger for TRestServer.SessionDeleteDeprecated
Impact
Les serveurs authentifiés chargés évitent que plusieurs threads entrent dans le même scan d’expiration par seconde. La sémantique d’expiration et les API publiques ne changent pas.
Unités
24
Faible
Un seul thread formate l’heure du journal HTTP par seconde
THttpLogger.Append dans mormot.net.http utilise LockedExc32 sur fTimeTix32 avant SetTimeText. Les threads concurrents réutilisent les chaînes ISO-8601 et NCSA en cache au lieu de les formater simultanément.
Performance
mormot.net.http
d7b698d8+6-5
net: optimized THttpLogger.Append time update
Impact
La journalisation HTTP à haut débit effectue moins de conversions de date en double tout en gardant le cache d’une seconde. Ni le format du journal ni l’API publique ne changent.
Unités
25
Faible
Les déclarations StackTrace recompilent avec Delphi 7
mormot.core.log place la directive static sur les deux surcharges TSynLog.StackTrace uniquement si HASINLINE est défini. Les anciens compilateurs Delphi ne rencontrent plus cette directive non prise en charge.
Compilateur & plateforme
mormot.core.log
332614f5+6-4
code: fixed Delphi 7 compilation
Impact
Les builds Delphi 7 utilisant mormot.core.log recompilent. Les cibles Delphi récentes et FPC gardent la même API StackTrace et le même comportement.
Mise à jour recommandée
Mettez à niveau si Delphi 7 échouait sur les déclarations TSynLog.StackTrace.
Unités
26
Faible
Les drapeaux compilateur décrivent la disponibilité de TThread.Finished
mormot.defines ajoute HASTTHREADFINISHED pour FPC et Delphi Unicode, et documente WINDELPHI avant de le définir pour Delphi sous Windows. Ces conditions servent le code de compatibilité TThread ancien.
Compilateur & plateforme
mormot.defines
86422854+6-3
core: added missing HASTTHREADFINISHED conditional
Impact
Le framework n’active l’émulation de Finished que pour Delphi 7/2007, pas pour les cibles qui possèdent déjà la propriété. Le code applicatif ne voit aucun changement direct d’API.
Unités
27
Faible
Le suivi des flux de réponse resserre le nettoyage et les diagnostics
Après la fusion de SetOutStream, mormot.net.http rend OutContentStreamDiscard sûr avec nil et réinitialise ses champs au même endroit. mormot.net.async précise que AsyncResponse abandonne un flux en attente ; les tests utilisent RaiseStreamError et ignorent les EStreamError attendues.
Sous le capot
mormot.net.async+1
7627b1ad+20-26
net: some refactoring after #554
Impact
Les flux de réponse possédés restent libérés et le contenu asynchrone retardé remplace toujours tout flux en attente. Ce suivi ne change ni l’API SetOutStream documentée ni les limites des serveurs.
28
Faible
Les nonces de démarrage n’entrent plus récursivement dans Random128
TCryptRandomEntropy.Create dans mormot.crypt.secure remplit son nonce applicatif de 16 octets avec RandomBytes au lieu de Random128. Les commentaires précisent que TAes.EncryptInitRandom doit éviter la récursion Random128 et que l’aléa système sert de repli.
Sous le capot
mormot.core.os.posix+5
a0141ee6+13-23
core: don't call Random128() at startup
Impact
L’initialisation de la source d’entropie évite de réentrer dans le PRNG principal pendant sa construction. Le nonce reste aléatoire ; les API publiques et formats générés ne changent pas.
29
Faible
Le cache horaire stocke directement TSynSystemTime
mormot.core.datetime remplace le champ GlobalTime de TSystemTime par TSynSystemTime et supprime l’alias absolute local dans FromGlobalTime. Le padding maintient chaque cache sur une ligne de 64 octets.
Sous le capot
mormot.core.datetime
6dda432f+12-11
core: simplified FromGlobalTime() implementation
Impact
Cela simplifie la copie interne sans modifier le contrat public de FromGlobalTime ni la précision de 16 ms. Le code applicatif Delphi/FPC n’est pas affecté.
Unités
30
Faible
Le watchdog Angelize abandonne les callbacks de nettoyage manuel
mormot.app.agl supprime les appels explicites à TSynLog.NotifyThreadEnded et log.Family.OnThreadEnded dans TSynAngelizeRunner et la création du watchdog. Leur héritage TThreadAbstract assure désormais le nettoyage.
Sous le capot
mormot.app.agl
afde3637+4-5
agl: follow new TThreadAbstract feature
Impact
Le comportement Angelize reste identique, avec une notification de fin centralisée au lieu d’appels manuels par classe. Les API applicatives ne changent pas.
Unités
31
Faible
Les threads SQLite et PostgreSQL s’alignent sur le nettoyage centralisé
mormot.db.sql.postgres supprime l’appel redondant à SynDBLog.NotifyThreadEnded de son thread asynchrone fondé sur TThreadAbstract. Le thread de sauvegarde SQLite reste un TThread et conserve l’appel explicite documenté à SQLite3Log.NotifyThreadEnded.
Sous le capot
mormot.db.raw.sqlite3+1
9a1c1313+4-5
db: adapt to the new TThreadAbstract class
Impact
Le nettoyage du journal des threads de base de données doit avoir lieu exactement une fois, sans modifier les sauvegardes SQLite ni l’asynchrone PostgreSQL. Aucune API applicative ne change.
32
Faible
Les tests et une démo de journalisation adoptent TThreadAbstract
La démo de journalisation dmvc-ai et TPipeConsumerThread dans test.net.proto héritent maintenant de TThreadAbstract au lieu de TThread. Ce commit ne change ni l’implémentation du framework ni une déclaration publique.
Tests
56660c17+4-4
test: favor TThreadAbstract usage
Impact
Le code applicatif n’est pas affecté ; les exemples montrent la classe de base recommandée pour automatiser le nettoyage du journal en fin de thread.
33
Faible
La documentation de Sha256Weak précise son usage strictement legacy
Les commentaires de mormot.crypt.core précisent que Sha256Weak complète les entrées de moins de 256 octets, ne sert qu’à la compatibilité mORMot 1 et ne doit pas être utilisé pour du nouveau code ou de nouvelles données. TSynSigner.Pbkdf2 et Modular Crypt sont proposés.
Documentation
mormot.crypt.core
8d60e5ed+7-6
crypt: refined Sha256Weak() documentation
Impact
Il n’y a aucun changement d’exécution ni d’API. Le texte aide les audits de sécurité à classer Sha256Weak comme dette de compatibilité plutôt que comme dérivation de mot de passe approuvée.
À regarder
API publique
Sha256Weakdeprecated — La documentation le réserve à la compatibilité mORMot 1 ; utiliser TSynSigner.Pbkdf2 ou Modular Crypt pour les nouvelles données.