Agir maintenantpeut affecter un système en productionLe commit de fusion de la suite de régression PDF ne nécessite pas d’entrée séparée. Son travail fonctionnel visible par le framework est couvert par les deux commits UI non-merge. Le payload ne contient aucun lien superseded_by ni calendrier de suppression supplémentaire au-delà du renommage HASUIPDF ; les fichiers de version ont été ignorés.
Les WebSockets sans délai se réveillent et le retrait IOCP devient atomique
Les backends réseau reçoivent plusieurs corrections concrètes de concurrence : les trames WebSocket sans délai réveillent le serveur asynchrone, les sockets tunnel déjà connectés suivent le bon traitement et une souscription IOCP Windows ne peut être retirée qu’une fois. Le recyclage des slots de thread TSynLog est aussi finalisé afin qu’un slot ne soit pas réutilisé avant l’effacement de ses bits de nom dans chaque journal. Les utilisateurs UI doivent vérifier la nouvelle condition HAS_UI_PDF et la suppression de HASUIPDF ; les changements PDF restants concernent surtout les tests et la sélection de plateforme.
En bref
- TWebSocketAsyncConnections réveille maintenant le thread principal du serveur asynchrone lorsque SendDelay=0 et que la file de sortie devient non vide.
- TWinIocp.Unsubscribe met atomiquement le pointeur de souscription de l’appelant à nil, empêchant deux retraits du même objet.
- TTunnelLocal distingue maintenant un socket d’écoute lié d’un socket déjà connecté, restaurant le bon chemin de traitement.
- TSynLog efface les bits de nom de thread dans chaque journal avant de rendre le numéro au pool de slots réutilisables.
- HASUIPDF est remplacé par HAS_UI_PDF, avec les nouveaux contrôles de projet NO_UI, NO_UI_VCL et NO_UI_PDF.
Conseil de mise à jour
Prenez la build 2.4.16753 pour les WebSockets asynchrones, TTunnelLocal, IOCP sous Windows ou les charges TSynLog créant beaucoup de threads ; elle contient les correctifs complets du payload. Recompilez les projets UI/PDF et remplacez les tests applicatifs HASUIPDF par HAS_UI_PDF. Examinez NO_UI, NO_UI_VCL et NO_UI_PDF seulement pour exclure ces sous-systèmes. Le payload ne signale aucun successeur ultérieur dans cette édition.
12 sur 12 entrées · 13 commits upstream
1
Élevée
Les slots de journalisation ne sont réutilisés qu’après effacement des bits
TSynLog.NotifyThreadEnded dans mormot.core.log efface maintenant fThreadNameLogged sous SynLogGlobalLock avant de verrouiller SynLogThreads.Safe et d’ajouter le numéro à IndexReleased. L’index du bitmap est aussi exprimé directement par num - 1.
Correctifs
mormot.core.log
68f8a3cb+16-17
core: fixed another paranoid race in TSynLog.NotifyThreadEnded
Impact
Un autre thread ne peut plus reprendre un numéro et poser son bit de nom avant que le thread terminé efface l’ancien. Les services Delphi/FPC créant beaucoup de threads conservent un marquage cohérent des noms.
Mise à jour recommandée
Utilisez la build 2.4.16753 plutôt que de vous arrêter au premier commit de verrouillage du journal.
Unités
2
Élevée
Le retrait IOCP Windows réserve atomiquement le pointeur appelant
TWinIocp.Unsubscribe dans mormot.net.sock.windows copie localement le pointeur de souscription, puis utilise LockedExc pour mettre le paramètre var à nil seulement s’il correspond encore. Les opérations de shutdown, receive et free utilisent le pointeur réservé.
Correctifs
mormot.net.sock.windows
76d9d035+9-9
net: made TWinIocp.Unsubscribe atomic
Impact
Deux appels concurrents ne peuvent plus réussir le test non-nil puis retirer ou libérer la même souscription IOCP. Les serveurs asynchrones Windows évitent un double shutdown et un possible accès après libération.
Mise à jour recommandée
Mettez à niveau les serveurs IOCP Windows où la fermeture d’une connexion peut concurrencer le nettoyage du propriétaire.
API publique
TWinIocp.Unsubscribebehaviour-changed — Le pointeur var est atomiquement réservé et effacé avant le début du retrait.
Unités
3
Élevée
Les trames WebSocket sans délai réveillent immédiatement le serveur
TWebSocketAsyncConnections.NotifyOutgoing mémorise si fOutgoingHandle était vide avant l’ajout. Quand le premier élément arrive et que Connection.fProcess.Settings^.SendDelay vaut zéro, il appelle le nouveau helper THttpAsyncConnections.WakeupServerMainThread qui signale fExecuteEvent.
Correctifs
mormot.net.async+1
a7195425+15-2
net: fixed TWebSocketAsyncConnections with SendDelay=0
Impact
Avec SendDelay=0, une trame sortante n’attend plus un événement socket sans rapport ou un passage idle avant son envoi. Le comportement immédiat attendu est restauré pour les serveurs WebSocket Delphi/FPC.
Mise à jour recommandée
Mettez à niveau les serveurs avec SendDelay=0 et retestez les trames émises par le serveur en l’absence de trafic entrant.
API publique
TWebSocketAsyncConnections with SendDelay=0behaviour-changed — La première connexion sortante en file réveille immédiatement la boucle serveur.
4
Élevée
Les tunnels locaux connectés n’entrent plus dans le chemin accept
TTunnelLocal dans mormot.net.tunnel renomme le drapeau interne fSocketCreated en fSocketBound et ne le pose qu’après le bind de NewSocket pour le port zéro. TTunnelLocalThread.DoExecute n’entre dans la boucle accept que si ce drapeau est présent.
Correctifs
mormot.net.tunnel
9cb2c9bc+5-5
net: fixed TTunnelLocal socket flag
Impact
Un tunnel ouvert par connexion à une adresse locale existante passe maintenant directement à stProcessing au lieu d’appeler accept sur un socket connecté. Les tunnels liés à un port éphémère conservent leur écoute.
Mise à jour recommandée
Mettez à niveau les déploiements TTunnelLocal qui se connectent à un port local non nul, puis retestez les deux sens du tunnel.
Unités
5
Moyenne
Les contrôles UI sont renommés et CountOccurrences devient public
mormot.defines remplace HASUIPDF par HAS_UI_PDF et introduit HAS_UI, HAS_UI_VCL_LCL ainsi que NO_UI, NO_UI_VCL et NO_UI_PDF. mormot.core.unicode ajoute CountOccurrences pour les occurrences RawUtf8 non chevauchantes ; mormot.core.text corrige aussi le nom du paramètre transmis par UInt32DigitsToUtf8.
Ruptures
mormot.core.text+3
fe0b21d2+59-18
core: new CountOccurrences() function
Impact
Les conditions d’application ou de package testant HASUIPDF ne sélectionnent plus leur branche PDF avant renommage. Les projets peuvent exclure toute l’UI, le chemin VCL Delphi ou seulement le PDF ; CountOccurrences est disponible en Delphi et FPC.
Migration nécessaire
Recherchez HASUIPDF dans les sources, packages et defines de build, remplacez-le par HAS_UI_PDF puis recompilez chaque cible UI et sans interface.
API publique
HASUIPDFremoved — Remplacer les tests de projet par HAS_UI_PDF.HAS_UI / HAS_UI_VCL_LCL / HAS_UI_PDFadded — Décrivent les capacités UI actives après les exclusions du projet.NO_UI / NO_UI_VCL / NO_UI_PDFadded — Options projet pour désactiver toute l’UI, VCL/LCL ou le support PDF.CountOccurrencesadded — Compte les occurrences non chevauchantes de SubStr dans un RawUtf8 Text.
6
Moyenne
Le nettoyage du bitmap des noms passe sous le verrou global
TSynLog.NotifyThreadEnded dans mormot.core.log protège l’accès à SynLogFamily et aux bitmaps fGlobalLog.fThreadNameLogged avec SynLogGlobalLock. Le travail existant sous SynLogThreads.Safe est d’abord imbriqué dans cette protection.
Correctifs
mormot.core.log
6539d93d+24-19
core: fixed a paranoid race in TSynLog.NotifyThreadEnded
Impact
Un thread terminé ne modifie plus les bitmaps de nom en concurrence avec le cycle de vie des familles de logs. Le commit ultérieur 68f8a3c finalise l’ordre avant la réutilisation du slot.
Mise à jour recommandée
Prenez la tête de l’édition afin d’associer ce verrou à l’ordre final de publication de 68f8a3c.
Unités
7
Moyenne
La maintenance asynchrone utilise une seule échelle monotone
mormot.net.async fixe fLastOperationMS avant que ProcessWaitingWrite puisse réentrer dans le traitement idle, puis le rafraîchit après. La cadence des callbacks non-IOCP dérive maintenant tix de GetTickCount64 shr 16 plutôt que GetTickSec shr 6, comme le reste de la logique en millisecondes.
Correctifs
mormot.net.async
f50a5e53+6-4
net: fixed async internal ticks computation
Impact
La maintenance des sockets asynchrones évite un travail récursif au même tick et utilise une tranche cohérente d’environ 65 secondes. Cela concerne surtout les backends poll POSIX ; les API ne changent pas.
Mise à jour recommandée
Mettez à niveau les serveurs asynchrones chargés, surtout les déploiements poll POSIX avec de grosses écritures en attente ou des callbacks périodiques.
Unités
8
Faible
Les types de hash et buffers fixes s’étendent jusqu’à 4096 bits
mormot.core.base ajoute THash1024, THash2048 et THash4096 avec leurs pointeurs, ainsi que TTemp128 et TTemp256. Des tableaux fixes dans SHA-512, CPU sets, SSPI, ISO, DHCP et TFTP sont remplacés par les types nommés équivalents sans changer leur taille.
Nouveautés
mormot.core.base+7
487c21e6+29-21
core: new THash1024..4096 and TTemp128..512 types
Impact
Le code applicatif gagne des déclarations standard de 128, 256 et 512 octets pour données binaires et buffers de pile. Les records existants gardent leur disposition, sans changement de format réseau.
API publique
THash1024 / PHash1024 / THash2048 / PHash2048 / THash4096 / PHash4096added — Tableaux d’octets nommés et pointeurs pour des valeurs de 128, 256 et 512 octets.TTemp128 / TTemp256added — Buffers temporaires AnsiChar fixes de 128 et 256 octets.
9
Faible
Le contexte des exceptions inclut maintenant le numéro de thread
mormot.core.log formate le contexte d’exception standard en [#numéro nom], en omettant chaque partie indisponible. _GetCurrentThreadName est simplifié sans changer son verrou et TDebugFile.AddLog appelle directement DebugFileGet.
Nouveautés
mormot.core.log
93da31e1+24-15
core: refined exception logging entry
Impact
Les lignes d’exception sont plus faciles à corréler avec TSynLog, mais les parseurs qui attendent seulement un nom entre crochets méritent une vérification. La gestion des exceptions et les API ne changent pas.
À regarder
API publique
TSynLog exception row formatbehaviour-changed — Le contexte standard ajoute #ThreadNumber avant le nom de thread optionnel.
Unités
10
Faible
TMultiLightLock utilise des drapeaux 32 bits et des identifiants natifs
mormot.core.os change les champs privés TMultiLightLock.Flags de PtrUInt en cardinal et ThreadID de pointer en TThreadID. Les opérations utilisent donc LockedExc32 et LockedDec32, et zéro remplace nil pour l’identifiant.
Sous le capot
mormot.core.os
aa0c8213+13-13
core: simplified TMultiLightLock
Impact
La propriété du verrou et le compteur réentrant gardent la même sémantique, avec un compteur atomique 32 bits sur toutes les cibles. Les utilisateurs n’accèdent qu’aux méthodes publiques ; aucun changement applicatif n’est attendu après recompilation.
Unités
11
Faible
TCachedValue conserve toujours le rafraîchissement terminé en dernier
TCachedValue.Cache dans mormot.core.os supprime la condition TixShr = Tix32 avant d’affecter Value après le callback. La liste publique de paramètres est seulement reformattée et mormot.core.os.security précise qu’un décalage de huit représente 256 secondes de cache.
Sous le capot
mormot.core.os+1
a697074f+6-7
core: minor TCachedValue.Cache change
Impact
Si des callbacks de rafraîchissement de périodes différentes se chevauchent, le dernier terminé est conservé même si un autre appel a avancé Tix32. Les caches de fichiers et certificats gardent la même API et durée.
12
Faible
Les tests PDF sont isolés derrière les nouveaux noms de capacité UI
mormot.ui.pdf et le runner d’intégration remplacent HASUIPDF par HAS_UI_PDF, tandis que mormot.defines ajoute HAS_UI_LCL pour FPC. test.ui.pdf est réorganisé, utilise mormot.lib.z pour son fixture et garde une unité vide sans support PDF UI.
Tests
mormot.defines+1
cf21f26e+202-232
ui: more refactoring of #571 test.ui.pdf process
Impact
Les builds de test sans UI n’initialisent plus VCL/LCL et n’incluent plus l’unité de tests PDF. Ce suivi ne change pas le comportement PDF à l’exécution ; il complète le renommage des conditions.
API publique
HAS_UI_LCLadded — Défini pour FPC lorsque le support UI est actif.