Agir maintenantpeut affecter un système en productionLe payload brut contient huit commits de merge et 51 commits non-merge ; chacun est couvert ci-dessous. Il ne contient ni marqueur superseded_by ni avis de dépréciation. Les deux plages à éviter proviennent de corrections explicites plus tard dans la séquence.
Les sockets POSIX survivent aux signaux tandis que TSynLog change son ABI de format
Cette série cross-platform est volumineuse. Les attentes, accept et I/O socket POSIX reprennent après EINTR sans allonger les deadlines, tandis que Delphi AArch64 gagne le dispatch d’interfaces, les variants late-bound et un cache temporel bien aligné. TSynLog remplace volontairement PUtf8Char par RawUtf8 dans ses API formatées et pré-rend hors verrou ; prenez les correctifs finaux car la build 2.4.16999 peut dépasser son buffer stack de 4 Ko.
En bref
- Visez la build 2.4.17002 au commit 4ef9dc663bbf00ad1920c83a7274e3676610b37f.
- Ne déployez pas la build 2.4.16999 : un log formaté proche de 4 Ko avec instance peut dépasser le buffer stack TSynLog.
- Migrez les paramètres de format TSynLogProc, Log, DoLog, Enter, EnterLocal et ManualEnter de PUtf8Char vers const RawUtf8.
- Les I/O socket POSIX, poll, epoll et accept reprennent après EINTR en conservant les deadlines ; prenez la séquence complète plutôt que les builds 2.4.16947 à 2.4.16964.
- Delphi AArch64 gagne DispInvoke et les appels d’interface sur Android/iOS, avec correction de l’alignement du verrou GlobalTime.
- Delphi POSIX corrige le blocage des ressources ordinales au démarrage et le décodage inversé des resourcestring courtes/longues.
Conseil de mise à jour
Visez la build 2.4.17002. Évitez 2.4.16947 à 2.4.16964, où les corrections POSIX EINTR, timeout et connexion async restent incomplètes ; 2.4.16954 régresse le reporting des timeouts. Ne déployez jamais 2.4.16999 : une ligne TSynLog formatée avec instance peut dépasser le buffer stack de 4 Ko ; 2.4.17000 corrige ce défaut. Migrez callbacks et wrappers vers RawUtf8, recompilez chaque cible Delphi/FPC, puis testez les signaux, les connexions en échec, les logs proches de 4 Ko, les ressources Delphi POSIX et les appels AArch64.
51 sur 51 entrées · 59 commits upstream
1
Critique
Le buffer de pré-rendu des logs ne peut plus déborder
TSynLogFamily.PreRenderFmt soustrait le préfixe d’instance de la capacité 4 Ko, et l’overload Unicode Log fournit maintenant son buffer stack.
Correctifs
mormot.core.log
99d189cc+7-4
core: fixed TSynLog latest commits
Impact
Build 2.4.16999 pouvait écrire au-delà du buffer stack pour une ligne proche de 4 Ko avec instance. Build 2.4.17000 supprime ce risque de corruption et rétablit la compilation Unicode.
Mise à jour recommandée
Ne déployez pas la build 2.4.16999. Prenez 2.4.17000 ou plus et testez des lignes proches de 4 Ko avec Instance non nil.
Unités
2
Élevée
Les overloads formatés TSynLog.Enter passent aussi à RawUtf8
Les overloads formatés Enter, EnterLocal et ManualEnter remplacent PUtf8Char par const RawUtf8 et partagent le pré-rendu 4 Ko.
Ruptures
mormot.core.log
5b05ee28+46-29
core: BREAKING CHANGE TSynLog.Enter Format is RawUtf8
Impact
Les wrappers de trace typés PUtf8Char ou variables d’overload ne compilent plus ; les appels RawUtf8 et littéraux restent directs.
Migration nécessaire
Recherchez les wrappers formatés Enter, EnterLocal et ManualEnter en PUtf8Char et passez leurs formats à RawUtf8.
API publique
TSynLog.Enter / EnterLocalsignature-changed — Les overloads formatés prennent const RawUtf8.TSynLog.ManualEntersignature-changed — L’overload formaté prend const RawUtf8.
Unités
3
Élevée
Les API TSynLog formatées prennent maintenant RawUtf8
TSynLogProc, TSynLog.Log, TSynLog.DoLog et leur formatter interne remplacent PUtf8Char par const RawUtf8.
Ruptures
mormot.core.base+1
1bde88e2+13-13
core: BREAKING CHANGE TSynLog Format text is now RawUtf8
Impact
Les littéraux restent souvent compatibles, mais les callbacks, method variables et appels PUtf8Char doivent passer à RawUtf8.
Migration nécessaire
Recherchez TSynLogProc et les callbacks avec format PUtf8Char ; passez-les à const RawUtf8 et convertissez les appels par pointeur.
API publique
TSynLogProcsignature-changed — Le paramètre Format est const RawUtf8.TSynLog.Log / TSynLog.DoLogsignature-changed — Les overloads formatés acceptent const RawUtf8.
4
Élevée
POSIX reprend systématiquement les I/O stream et datagram après EINTR
Les méthodes Send, Recv, SendTo et RecvFrom passent dans les includes de plateforme ; POSIX reprend les syscalls interrompus et Windows garde WinSock direct.
Correctifs
mormot.net.sock+2
7e5228a5+159-87
net: fixed POSIX signals interception for Send/Recv/SendTo/RecvFrom
Impact
Le trafic socket Linux/BSD échoue moins sous les signaux, en TCP comme en UDP. Windows et les signatures publiques restent inchangés.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
5
Élevée
Les constantes MSG_NOSIGNAL sont corrigées sur les systèmes POSIX
mormot.net.sock.posix corrige MSG_NOSIGNAL pour Darwin, FreeBSD, NetBSD, DragonFlyBSD, OpenBSD et Solaris, sans changer Linux/Android.
Correctifs
mormot.net.sock.posix
e8264e1b+21-23
net: fixed cross-platform MSG_NOSIGNAL definitions
Impact
Les envois socket sur BSD/Solaris demandent maintenant le bon comportement no-SIGPIPE au lieu d’un flag incorrect.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
6
Élevée
La connexion non bloquante renvoie la vraie erreur de fin
TNetAddr.SocketConnect remplace une boucle de 50 ms par WaitFor puis SO_ERROR, gère les connexions async en attente et renomme GetSocketError en GetRawSocketError.
Correctifs
mormot.net.sock
04130d2b+15-22
net: fixed TNetAddr.SocketConnect error handling
Impact
Les échecs TCP ne sont plus pris pour un succès writable, et les appelants async reçoivent nrOk pendant l’attente. Les utilisateurs du nom intermédiaire doivent le renommer.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
API publique
TNetSocketWrap.GetSocketErrorrenamed — Renommé GetRawSocketError.
Unités
7
Élevée
Les attentes socket conservent leur deadline après les signaux POSIX
PollNoEintr enveloppe poll, reprend après EINTR et recalcule le timeout restant ; TNetSocketWrap.WaitFor l’utilise au lieu de traiter EINTR comme un timeout.
Correctifs
mormot.net.sock.posix
989e6d5b+28-4
net: fixed POSIX EINTR for TNetSocketWrap.WaitFor
Impact
Les clients et serveurs POSIX ne sortent plus trop tôt et n’allongent plus indéfiniment les attentes finies après un signal. Windows n’est pas affecté.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
8
Élevée
accept et accept4 reprennent après interruption
Le helper POSIX doaccept reprend accept4/accept après EINTR, préserve les descriptors non bloquants et ne marque accept4 unsupported que pour ENOSYS/EOPNOTSUPP.
Correctifs
mormot.net.sock.posix
109cf3c5+19-13
net: fixed accept/accept4 POSIX signals support
Impact
La livraison d’un signal ne produit plus de faux échec accept sur POSIX, et les anciens kernels gardent un fallback correct.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
9
Élevée
Les constantes socket BSD correspondent aux headers natifs
Les définitions POSIX corrigent NI_NUMERIC*, les flags poll write, le keepalive FreeBSD, l’interface cellulaire Darwin et ARPOP_InREPLY.
Correctifs
mormot.net.sock.posix
6949ac17+21-11
net: fixed POSIX cross-platform constants for various BSD flavors
Impact
Le réseau FreeBSD, NetBSD, DragonFlyBSD, OpenBSD, Darwin et Solaris utilise les bons numéros natifs au lieu de valeurs orientées Linux.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
10
Élevée
Les anciens kernels passent correctement de accept4 à accept
doaccept mémorise errno, sort sur erreur fatale accept4 et passe à accept après ENOSYS/EOPNOTSUPP ; les I/O POSIX testent directement cerrno.
Correctifs
mormot.net.sock.posix
29c8bebb+14-11
net: fixed POSIX accept4 -> accept fallback
Impact
Les systèmes Linux sans accept4 utilisable ne restent plus sur le chemin unsupported et exécutent bien le fallback listener.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
11
Élevée
SocketConnect change de mode seulement après une attente réussie
TNetAddr.SocketConnect garde la socket async pendant WaitForWithRawSocketError, convertit nrRetry en nrTimeout et appelle MakeBlocking seulement après succès.
Correctifs
mormot.net.sock
1d878f7f+9-14
net: fixed TNetAddr.SocketConnect
Impact
La fin de connexion POSIX/Windows est vérifiée sans passer trop tôt en mode bloquant, évitant les blocages et respectant le mode demandé.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
12
Élevée
Les échecs d’entrée TSynLog gardent timing et scope cohérents
TSynLog initialise le timing dans son constructeur, transmet MicroSecs via LogEnterFmt et fait renvoyer nil par EnterLocal si LockAndPrepareEnter échoue.
Correctifs
mormot.core.log
e4c69cc1+12-9
core: some TSynLog.Enter fixes on error
Impact
Un démarrage ou une rotation en échec ne laisse plus un faux scope réussi, et les pointeurs de timing manuel reçoivent le timestamp attendu.
Mise à jour recommandée
Mettez à niveau les services utilisant EnterLocal ou ManualEnter pendant l’initialisation et testez l’échec de création du fichier.
Unités
13
Élevée
Les connexions TCP immédiates rétablissent le mode bloquant
Quand connect réussit immédiatement, TNetAddr.SocketConnect appelle MakeBlocking pour ms >= 0 et laisse les appels ms = -1 asynchrones.
Correctifs
mormot.net.sock+1
496af189+9-4
net: fixed TNetAddr.SocketConnect immediate connection
Impact
Les clients Delphi/FPC synchrones ne reçoivent plus une socket non bloquante sur le chemin de connexion immédiate.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
14
Élevée
Les noms de ressource entiers ne bloquent plus le démarrage Delphi POSIX
TExecutableResource.Open et ResourceExists rejettent sous Delphi POSIX les pointeurs MAKEINTRESOURCE inférieurs à $10000 avant leur conversion en chaîne par la RTL.
Correctifs
mormot.core.os
a21c2edb+8-0
core: fixed startup hang of Delphi POSIX apps using integer resource names
Impact
Les applications Delphi Linux, macOS, Android et iOS évitent une boucle GPF/stack overflow au démarrage ; les ressources ordinales restent non prises en charge.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
15
Élevée
Les verrous GlobalTime sont alignés sous Delphi AArch64
Le record du cache GlobalTime n’est plus packed, assurant l’alignement de TRWLightLock ; les assertions ultérieures tolèrent le padding du compiler.
Correctifs
mormot.core.datetime
b8eaea86+6-1
core: fixed unaligned GlobalTime[] breaking its lock on Delphi aarch64
Impact
Les applications Delphi AArch64, notamment iOS, évitent les access violations des instructions atomiques sur adresse impaire. Les autres compilers gardent la même sémantique.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
16
Élevée
Une régression de timeout socket est réparée
PollNoEintr rétablit result := 0 à l’expiration, et TNetSocketWrap.WaitFor sort avant de lire des revents périmés.
Correctifs
mormot.net.sock.posix
8187f47f+5-2
net: fixed TNetSocketWrap.WaitFor timeout regression
Impact
Les attentes POSIX renvoient de nouveau un timeout propre au lieu d’interpréter un état poll périmé. Cette réparation est indispensable à la refonte précédente.
Mise à jour recommandée
Utilisez la build 2.4.16955 ou ultérieure, jamais 2.4.16954, et rejouez les tests de timeout sous signaux.
Unités
17
Élevée
Les resourcestring Delphi POSIX utilisent le bon layout
LoadResString teste ShortLen <> $ffff pour le layout court ; $ffff sélectionne maintenant correctement le record resourcestring long de la RTL Delphi.
Correctifs
mormot.core.os.delphi
2b55dc23+1-1
core: fixed swapped short/long resourcestring layout on Delphi POSIX
Impact
Les applications Delphi POSIX chargent les resourcestring courtes et longues depuis les bons champs au lieu d’un texte corrompu ou inversé.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
18
Élevée
Delphi Android et iOS gagnent des stubs d’interface AArch64 statiques
mormot.core.interfaces lie des stubs AArch64 externes, passe les résultats by-reference via X8 et utilise des thunks statiques là où iOS interdit les pages exécutables générées.
Nouveautés
mormot.core.interfaces+1
0d9880b7+319-2
interfaces: external aarch64 stubs for the Delphi Android and iOS compilers
Impact
Interface services et fake dispatch deviennent utilisables sous Delphi Android/iOS AArch64, y compris sur iOS signé. macOS et Windows ARM64 restent hors de cette implémentation.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
19
Élevée
DispInvoke comprend les varargs Delphi AArch64
mormot.core.variants ajoute des lecteurs va_list AAPCS64 et Apple AArch64 afin que DispInvokeNamed récupère les arguments selon chaque ABI.
Nouveautés
mormot.core.variants+1
ea847060+90-13
variants: implemented DispInvoke late-binding on Delphi aarch64
Impact
Late-bound variant fonctionne maintenant sous Delphi Android, Linux, iOS et macOS AArch64 au lieu d’un layout incompatible.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
20
Moyenne
LogView normalise le layout de chaque client distant
TRemoteLogNormalizer réécrit les lignes calendrier, zonées, haute résolution ou texte dans un layout unique et attribue des threads uniques par connexion HTTP.
Correctifs
mormot.tools.logview+1
6a02c38a+500-40
tools: LogView remote logging with any client layout - fix #344
Impact
Les logs live de clients aux layouts TSynLog différents deviennent tous visibles et filtrables. Le changement reste limité à LogView et à sa capture distante.
21
Moyenne
La disponibilité socket gère explicitement les signaux POSIX
TNetSocketWrap.Available reçoit des implémentations POSIX et Windows séparées ; POSIX MSG_PEEK reprend après EINTR et conserve errno.
Correctifs
mormot.net.sock+2
b0bbdf13+94-59
net: fixed TNetSocketWrap.Available on POSIX
Impact
Les contrôles de connexion ne classent plus un peek POSIX interrompu comme socket fermée. Le comportement Windows reste identique.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
22
Moyenne
Les envois et réceptions UDP reprennent après EINTR sous POSIX
TNetSocketWrap.SendTo et RecvFrom répètent sendto et recvfrom sous POSIX lorsque errno vaut EINTR, sans changer Windows.
Correctifs
mormot.net.sock
389ef677+27-8
net: fixed EINTR on TNetSocketWrap.SendTo/RecvFrom
Impact
Les services Linux et BSD riches en signaux ne signalent plus d’échec UDP transitoire dû seulement à une interruption syscall. Les signatures ne changent pas.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
23
Moyenne
epoll_ctl reprend après EINTR et les boucles de timeout sont resserrées
EpollCtlNoEIntr enveloppe epoll_ctl pour subscribe/unsubscribe, et les boucles poll/epoll s’arrêtent quand le timeout recalculé atteint zéro.
Correctifs
mormot.net.sock.posix
99bc19a1+15-17
net: fixed EINTR in TPollSocketEpoll and poll/epoll timeouts
Impact
Linux subscriptions résistent aux signaux, mais cette build intermédiaire omet un reset du résultat timeout rétabli ensuite ; ne restez pas sur 2.4.16954.
À regarder
Unités
24
Moyenne
Les tests de reachability utilisent des connexions async vérifiées
GetReachableNetAddr utilise SocketConnect(-1), WaitForWithRawSocketError et MakeBlocking, ferme les sockets en échec et s’arrête sans candidat.
Correctifs
mormot.net.sock
a74fa349+22-10
net: rewritten GetReachableNetAddr() function
Impact
Le probing ne considère plus comme reachable une socket writable avec SO_ERROR en attente, améliorant la sélection d’endpoint.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
25
Moyenne
L’alignement AArch64 et le nettoyage Tunnel reçoivent des correctifs
Les assertions GlobalTime tolèrent le padding, les commentaires resource sont clarifiés et TTunnelLocal.OpenInternal initialise thread avant les exceptions.
Correctifs
mormot.core.datetime+2
ce3a81b8+11-17
core: some fixes after previous commits
Impact
Cela supprime un risque d’assertion au démarrage Delphi AArch64 et évite des diagnostics indéfinis si Tunnel échoue avant la création du thread.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
26
Moyenne
Les attentes epoll gardent aussi leur timeout après EINTR
EpollWaitNoEintr reprend epoll_wait après EINTR et soustrait le temps écoulé avant la reprise de TPollSocketEpoll.WaitForModified.
Correctifs
mormot.net.sock.posix
9c8515b0+24-3
net: fixed EINTR support on TPollSocketEpoll.WaitForModified
Impact
Les serveurs epoll Linux respectent leur deadline et ne remontent pas les interruptions comme événements manquants. Les API ne changent pas.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
27
Moyenne
La découverte MAC distante survit aux envois ARP interrompus
GetRemoteMacAddress reprend son sendto ARP après EINTR, et les helpers poll/epoll initialisent explicitement leurs deadlines.
Correctifs
mormot.net.sock.posix
3af914ac+14-12
net: fixed EINTR support on GetRemoteMacAddress()
Impact
La recherche MAC par ARP sous Linux ne se perd plus à cause d’un signal. Les autres plateformes et API ne changent pas.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
28
Moyenne
Les échecs Tunnel conservent leur contexte socket
TTunnelLocalThread inclut l’erreur accept brute, et TTunnelLocal.OpenInternal logue classe, message, thread et socket avant nettoyage.
Correctifs
mormot.net.tunnel
93ac7a4a+13-7
net: enhanced Tunnel error handling
Impact
Les échecs Tunnel deviennent diagnostiquables et ferment toujours la socket partielle. Le protocole et les signatures ne changent pas.
Unités
29
Moyenne
Les recherches XML absolues déplacent volontairement le parser
TXmlParser.GetU renvoie false pour nil, préserve la position pour les chemins relatifs et //, mais un chemin / absolu rewind et reste au résultat ; GetI suit ce comportement.
Correctifs
mormot.core.fmt
9dc38579+15-5
core: refined TXmlParser.GetU/GetI process
Impact
Le code qui attendait une restauration après GetU('/...') ou GetI('/...') observe maintenant un curseur déplacé et doit revoir sa séquence.
À regarder
Recherchez les GetU/GetI avec chemin absolu et utilisez Save/Restore si la position doit survivre.
API publique
TXmlParser.GetU / GetIbehaviour-changed — Les chemins absolus laissent le parser au résultat.
Unités
30
Moyenne
L’interception SIGPIPE utilise SIG_IGN et mémorise le succès
SigPipeIntercept installe SIG_IGN au lieu d’un handler vide et ne pose son flag qu’après succès de fpSigaction.
Correctifs
mormot.core.os.posix
ec6e317b+5-5
core: SigPipeIntercept() cleanup
Impact
Les processus POSIX obtiennent une suppression conventionnelle de SIGPIPE et peuvent retenter après un sigaction en échec. Les API ne changent pas.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
31
Moyenne
Les ensembles socket basés sur poll ignorent EINTR sans perdre le temps
TPollSocketPoll.WaitForModified et WaitForSeveral appellent maintenant PollNoEintr et conservent leur timeout fini malgré les signaux.
Correctifs
mormot.net.sock.posix
e637b45f+4-4
net: fixed TPollSocketPoll.WaitForModified / WaitForSeveral EINTR support
Impact
Les backends poll POSIX ne renvoient plus un résultat vide ou erroné à cause d’un signal. Les API ne changent pas.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
32
Moyenne
LogView revient comme outil desktop Lazarus
Une nouvelle application LCL mormot.tools.logview ouvre, filtre, recherche et profile les fichiers TSynLog, SynLZ et texte brut, avec layout DPI et file d’attente distante.
Nouveautés
mormot.tools.logview
307a9fb7+2162-0
tools: port the mORMot 1 LogView sample as a FPC/Lazarus LCL app
Impact
Les backends ne changent pas ; les utilisateurs FPC/Lazarus gagnent un viewer maintenu, avec traitement sûr des logs distants dans le thread UI.
Unités
33
Moyenne
OpenSSL 4 supprime SIGPIPE par socket
SSLSetFdNoSigPipe utilise BIO_C_SET_SEND_FLAGS avec NET_MSG_NOSIGNAL sous OpenSSL 4+, avec fallback SigPipeIntercept pour OpenSSL 1.1/3.x.
Nouveautés
mormot.core.os+2
a413d047+67-20
lib: use new OpenSSL 4+ BIO_C_SET_SEND_FLAGS for MSG_NOSIGNAL
Impact
Les applications POSIX avec OpenSSL 4 ne changent plus SIGPIPE pour tout le processus. Les anciennes versions gardent le comportement historique.
À regarder
34
Moyenne
Les callbacks de log distant peuvent identifier leur émetteur
TRestHttpRemoteLogServer ajoute CreateWithSender et TRemoteLogReceivedFrom, avec ID de connexion et IP distante ; les callbacks sont affectés avant le démarrage HTTP.
Nouveautés
mormot.rest.http.server
e29490aa+30-7
rest: TRestHttpRemoteLogServer.CreateWithSender
Impact
Les utilisateurs de Create gardent leur callback. Les nouveaux viewers Delphi/FPC distinguent les émetteurs simultanés et les requêtes initiales ne rencontrent plus un callback absent.
API publique
TRemoteLogReceivedFromadded — Callback avec ID de connexion et IP distante.TRestHttpRemoteLogServer.CreateWithSenderadded — Crée un serveur de log distant avec identification de l’émetteur.
Unités
35
Moyenne
Les sockets exposent leur résultat SO_ERROR
TNetSocketWrap ajoute GetSocketError, interroge SOL_SOCKET/SO_ERROR et convertit la valeur en TNetResult ; Delphi POSIX expose aussi SO_ERROR.
Nouveautés
mormot.core.os.delphi+1
a299fb59+22-2
net: new TNetSocketWrap.GetSocketError method
Impact
Низкоуровневый код Delphi/FPC может правильно проверять завершение async connect, но это промежуточное имя далее меняется на GetRawSocketError.
API publique
TNetSocketWrap.GetSocketErroradded — Nom intermédiaire, renommé ensuite GetRawSocketError.
36
Moyenne
Un helper combine attente de connexion et SO_ERROR
TNetSocketWrap.WaitForWithRawSocketError attend les événements write/error puis renvoie GetRawSocketError, avec nrRetry si aucun événement.
Nouveautés
mormot.net.sock
07c8080b+16-2
net: new TNetSocketWrap.WaitForWithRawSocketError method
Impact
Le code de connexion async personnalisé peut réutiliser le même contrôle correct que SocketConnect. Les appelants existants ne changent pas.
API publique
TNetSocketWrap.WaitForWithRawSocketErroradded — Attend la fin socket et lit SO_ERROR.
Unités
37
Moyenne
Accept peut renvoyer l’erreur socket brute
TNetSocketWrap.Accept ajoute une sortie rawError optionnelle transmise à NetLastError, tout en gardant les appels à trois arguments grâce à nil par défaut.
Nouveautés
mormot.core.os.posix+1
e8de6bf7+7-9
net: enhanced TNetSocketWrap.Accept()
Impact
Les serveurs peuvent journaliser errno exact derrière un échec accept sans casser les appels Delphi/FPC existants.
API publique
TNetSocketWrap.Acceptsignature-changed — Ajoute rawError: PNetErrorInt = nil optionnel.
38
Moyenne
Le texte d’instance est pré-calculé avec la ligne de log
TSynLogFamily.PreRenderFmt écrit maintenant le préfixe classe/pointeur de l’instance dans le même buffer stack avant le verrou.
Performance
mormot.core.log
a6bb53dc+31-21
core: pre-compute the TSynLog instance pointer text if possible
Impact
Les logs multithread avec instance réduisent encore le verrou, mais cette version calcule mal l’espace restant et est réparée en 2.4.17000.
À regarder
Unités
39
Moyenne
Le texte formaté du log est rendu avant le verrou
TSynLog pré-rend jusqu’à 4 Ko sur la stack hors du verrou, remplace les contrôles et ajoute TSynLogFamily.DirectRendering pour revenir au rendu sous verrou.
Performance
mormot.core.log
ab869875+29-4
core: pre-render formatted text up to 4KB on stack outside of the TSynLog lock
Impact
Les services multithread réduisent le temps sous verrou. Les arguments object/interface gardent le slow path et DirectRendering préserve les writers personnalisés.
À regarder
Benchmarkez les logs intensifs et activez DirectRendering si un writer personnalisé dépend du rendu sous verrou.
API publique
TSynLogFamily.DirectRenderingadded — Désactive le nouveau fast path de pré-rendu 4 Ko.
Unités
40
Moyenne
Android moderne trouve ICU sans libicudata
La détection ICU Android essaie libicuuc.so et libicui18n.so quand libicudata.so est absent, puis résout les symboles versionnés ou non.
Compilateur & plateforme
mormot.core.os.posix
36796d3c+11-1
core: enhanced ICU detection on modern Android
Impact
Les versions Android actuelles avec ICU dans un APEX retrouvent la conversion Unicode pour les applications Delphi/FPC. Les autres cibles POSIX ne changent pas.
Mise à jour recommandée
Passez à la build 2.4.17002 et testez ce chemin corrigé sur chaque cible Delphi/FPC concernée avant déploiement.
Unités
41
Moyenne
Le log distant utilise toujours le serveur socket portable
TRestHttpRemoteLogServer choisit useHttpSocket partout au lieu de HTTP_DEFAULT_MODE, évitant l’enregistrement http.sys et un fallback dépendant des droits.
Compilateur & plateforme
mormot.rest.http.server
4f487ad9+5-5
rest: TRestHttpRemoteLogServer now uses useHttpSocket on all systems
Impact
Les déploiements Windows ne changent plus de backend selon les droits administrateur. Le serveur socket convient au faible nombre de clients visé.
À regarder
Unités
42
Faible
Les échecs accept incluent l’erreur système
Les boucles accept async et threadées récupèrent errno brut et ajoutent SystemErrorShort aux logs ; la blacklist n’est testée qu’après succès.
Correctifs
mormot.net.async+1
d59aeb92+16-11
net: enhanced accept() logged error content
Impact
Les opérateurs obtiennent un diagnostic utile sans changement public. Un accept en échec ne passe plus une adresse non initialisée à la blacklist.
43
Faible
LogView garde les colonnes clés visibles et mémorise la police
LogView empêche la colonne texte de cacher heure, niveau et thread, et ajoute une taille de police persistante par clavier, molette et menu.
Nouveautés
mormot.tools.logview
1c454fb6+148-12
tools: LogView keeps the first columns visible and has a custom font size
Impact
Seule l’interface Lazarus LogView change ; le backend de log et les formats de fichier ne changent pas.
Unités
44
Faible
Les caractères de contrôle peuvent être remplacés sur place
mormot.core.unicode ajoute TrimControlCharsBuffer, remplaçant les octets #0 à #31 par des espaces directement dans le buffer UTF-8.
Nouveautés
mormot.core.unicode
bcf4e877+22-2
core: new TrimControlCharsBuffer() function
Impact
Le code existant ne change pas ; les appelants gagnent un helper sans allocation utilisé par le nouveau pre-rendering TSynLog.
API publique
TrimControlCharsBufferadded — Remplace les contrôles ASCII par des espaces sur place.
Unités
45
Faible
La localisation courte peut omettre le fallback hexadécimal
TDebugFile.FindLocationShort ajoute aNoHex, utilise PointerToHexShortVar sinon, et corrige des commentaires récents du code de log.
Nouveautés
mormot.core.log
add4ed16+13-9
core: some logging fixes and TSynLogFile enhancement
Impact
Les appelants diagnostic peuvent demander un résultat vide sans symbole. Les appels à deux arguments gardent le fallback hexadécimal.
API publique
TDebugFile.FindLocationShortsignature-changed — Ajoute aNoHex: boolean = false optionnel.
Unités
46
Faible
Le texte d’un pointeur peut être écrit dans tout ShortString
mormot.core.text ajoute PointerToHexShortVar, et PointerToHexShort lui délègue la conversion hexadécimale.
Nouveautés
mormot.core.text
cd8db464+15-6
core: new PointerToHexShortVar() function
Impact
Les appelants existants ne changent pas ; le diagnostic sans allocation peut remplir directement un ShortString existant.
API publique
PointerToHexShortVaradded — Écrit un pointeur dans un ShortString fourni.
Unités
47
Faible
Les arguments de format peuvent être testés pour le rendu d’objets
mormot.core.text ajoute VarRecHasObject pour détecter vtObject/vtInterface nécessitant TTextWriter.WriteObject.
Nouveautés
mormot.core.text
906a763f+18-2
core: new VarRecHasObject() function
Impact
Le helper prépare l’optimisation des logs sans changer les applications. Il est renommé VarRecNeedsWriteObject plus tard dans la série.
Unités
48
Faible
La valeur MSG_NOSIGNAL de la plateforme devient publique
mormot.net.sock initialise la variable publique NET_MSG_NOSIGNAL depuis la constante plateforme pour le code socket/TLS supérieur.
Nouveautés
mormot.net.sock
eabe6fba+7-2
net: new NET_MSG_NOSIGNAL global cross-platform constant
Impact
Les applications existantes ne changent pas ; les intégrations bas niveau peuvent lire le flag sans dupliquer les conditionnels.
API publique
NET_MSG_NOSIGNALadded — Copie runtime de la valeur MSG_NOSIGNAL plateforme.
Unités
49
Faible
Le formatage UTF-8 borné arrête le parsing une fois plein
TFormatUtf8.InitParse reçoit MaxSize et arrête de collecter les blocs une fois la limite atteinte ; FormatBufferRaw et FormatShort passent leur capacité réelle.
Performance
mormot.core.text
7a04bb59+14-10
core: optimized TFormatUtf8.InitParse when a maximum size is involved
Impact
Le formatage tronqué évite de convertir les arguments ultérieurs inutiles, réduisant le travail avec la même sortie bornée.
Unités
50
Faible
Le test de format objet reçoit son nom final
VarRecHasObject devient VarRecNeedsWriteObject avec un test VType byte-safe, et les commentaires TXmlParser documentent le curseur absolu.
Sous le capot
mormot.core.fmt+1
697af472+10-7
core: some renaming/comment with no functional change
Impact
Seul le code écrit contre le nom intermédiaire doit le renommer ; les applications antérieures n’ont aucune migration.
API publique
VarRecHasObjectrenamed — Le nom final est VarRecNeedsWriteObject.
51
Faible
Le suivi AArch64 ne change que style et inline
Le commit corrige l’indentation, marque les helpers va_list AAPCS64 inline et ajuste le changelog Delphi 13.1.
Entretien
mormot.core.interfaces+1
dfac0653+7-7
core: minor change after previous PR
Impact
Il n’y a aucun impact fonctionnel ; le comportement Delphi/FPC et les API restent identiques.