mORMot2 DailyLecture quotidienne des commits upstream

L’arrêt asynchrone ferme les fuites et les délais HTTP se séparent par phase

Cette édition réseau a un impact élevé. Les serveurs asynchrones, les tunnels et RTSP-over-HTTP reçoivent une correction coordonnée de la propriété et de l’arrêt, tandis que TSynThreadPool ferme une course pouvant laisser du travail en file d’attente endormi. Les clients HTTP gagnent des délais distincts pour la connexion, l’envoi et la réception, et l’authentification Kerberos côté serveur est regroupée derrière un wrapper multiplateforme avec la suppression d’une méthode publique.

En bref

  • TSynThreadPool now clears a worker's processing state under the pending-queue lock, preventing a queued task from being stranded by a wake-up race.
  • Async socket, tunnel and RTSP-over-HTTP cleanup now closes file descriptors and transferred connections on failure and shutdown paths.
  • TCrtSocket and HTTP clients now expose separate connect, send and receive timeouts; use 0, not a negative value, when requesting legacy fallback on a live TCrtSocket.
  • TServerSspiKeyTab.ComputeServerHeader is removed; migrate direct callers to KerberosServerAuthHeader and prepare a POSIX keytab explicitly when required.
  • Delphi users should land on build 2.4.17398, which repairs compilation after the timeout constructor refactor.

Conseil de mise à jour

Mettez à niveau les déploiements de serveurs asynchrones, tunnels et RTSP vers le build final 2.4.17398, puis testez l’arrêt avec des connexions inactives, des requêtes partielles et des écritures en attente. Les utilisateurs Delphi ne doivent pas s’arrêter sur 2.4.17393–2.4.17397. Recherchez TServerSspiKeyTab.ComputeServerHeader et remplacez les appels directs par KerberosServerAuthHeader.

Build2.4.17372 → 2.4.17398
Commits26
Lignes+1199 -716
Lecture7 min

25 sur 25 entrées · 26 commits upstream

Sujets
# Entrée Catégorie Unités
1 Critique Une course de réveil du pool pouvait bloquer du travail en file TSynThreadPool.PopPendingContext accepte désormais le thread appelant et efface son fProcessingContext tout en gardant fPendingSafe. L’inspection de la file et la publication de l’état inactif du worker deviennent atomiques vis-à-vis de Push. Correctifs mormot.core.threads+1 4860cac1+18-20

core: fixed TSynThreadPool.PopPendingContext race condition

Impact

Sur les chemins du pool sans IOCP, Push ne peut plus placer une tâche derrière un worker sur le point de dormir sans le réveiller. Le travail asynchrone en attente ne reste plus bloqué jusqu’à un événement indépendant.

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

2 Élevée La méthode directe d’authentification HTTP par keytab est supprimée TServerSspiKeyTab.ComputeServerHeader est supprimé. TServerSspiKeyTab gagne FileSetter et un getter KeyTab sûr sur nil, tandis que ServerSspiDataNtlm vérifie désormais au moins quatre octets avant de lire un cardinal. Ruptures mormot.lib.gssapi+1 03373d42+46-61

lib: removed TServerSspiKeyTab.ComputeServerHeader

Impact

Les applications qui appellent ComputeServerHeader ne compilent plus. Les jetons SSPI/GSSAPI courts et mal formés sont désormais rejetés sans lecture cardinal hors limites.

Migration nécessaire

Recherchez TServerSspiKeyTab.ComputeServerHeader. Appelez KerberosServerAuthHeader à la place ; sous POSIX, appelez d’abord PrepareKeyTab avec un keytab spécifique.

API publique

  • TServerSspiKeyTab.ComputeServerHeaderremoved — Utilisez KerberosServerAuthHeader de mormot.net.client.
  • TServerSspiKeyTab.FileSetteradded

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

3 Élevée L’arrêt du serveur asynchrone maîtrise tous les chemins de sortie des connexions TAsyncConnections ferme les lectures en attente, attend les workers et boucles d’acceptation, libère les connexions suivies, autorise l’insertion finale dans le GC et corrige l’ordre de ConnectionDelete et EndConnection. Les échecs de requête client abandonnent désormais les connexions transférées de façon cohérente. Correctifs mormot.net.async+1 c87c00ab+92-50

net: avoid connection leaks in async server

Impact

Les serveurs asynchrones Delphi et FPC de longue durée évitent les fuites d’objets de connexion et de sockets lors de l’arrêt, des acceptations échouées et des erreurs de préparation client. La destruction attend la stabilisation de la propriété des workers avant de libérer l’état partagé.

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

4 Élevée La préparation RTSP-over-HTTP nettoie chaque connexion partiellement acquise TRtspOverHttpServer.ConnectionCreate suit explicitement la propriété des connexions GET, POST et RTSP et libère chaque objet ou socket RTSP brut dans finally, sauf si la propriété a été transférée avec succès. Correctifs mormot.net.rtsphttp 213dd8c6+50-33

net: fixed potential leaks in TRtspOverHttpServer

Impact

Un appairage RTSP-over-HTTP échoué ou interrompu ne fuit plus de sockets ni d’objets de connexion. Les API applicatives Delphi et FPC ne changent pas.

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

5 Élevée Les chemins d’échec du tunnel ferment les deux sockets d’extrémité TTunnelLocalThread.Destroy ferme fServerSock et fClientSock, tandis que TTunnelLocal.Open et OpenSocket utilisent ShutdownAndClose et mettent à nil les sockets transférés lors des exceptions et échecs de préparation. Correctifs mormot.net.tunnel 2eb90dbc+17-5

net: fixed FD socket leak in TTunnelLocal

Impact

Les ouvertures de tunnel échouées répétées n’accumulent plus de descripteurs de fichiers ni de handles de socket sur les cibles POSIX, Delphi ou FPC.

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

6 Élevée La destruction des connexions asynchrones ferme les sockets laissés par Stop TPollAsyncConnection.Destroy libère désormais fSecure, règle linger pour une fermeture immédiate et appelle ShutdownAndClose lorsque fSocket reste assigné après Stop. Correctifs mormot.net.async 5707c869+19-2

net: fixed TPollAsyncConnection.Destroy

Impact

La destruction d’une connexion asynchrone partiellement arrêtée ne laisse plus son handle de socket ouvert. La correction s’applique aux backends asynchrones Delphi et FPC.

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

7 Élevée La désinscription epoll ferme les sockets même si le retrait échoue TPollSocketEpoll.Unsubscribe déplace la fermeture du socket brut hors de la branche de succès EPOLL_CTL_DEL lorsque fUnsubscribeShutdownSocket est actif. Il ferme aussi lorsque le descripteur epoll n’est déjà plus disponible. Correctifs mormot.net.sock 54de4647+11-10

net: fixed leaking socket FD in TPollSocketEpoll.Unsubscribe

Impact

Les serveurs Linux et autres backends epoll ne fuient plus de descripteurs lorsque la désinscription entre en course avec la destruction ou que EPOLL_CTL_DEL échoue. Windows et les backends sans epoll ne sont pas affectés.

Arnaud Bouchez · 06:34 UTC · voir le commit sur GitHub →

8 Élevée La compilation Delphi est rétablie après le refactoring des délais HTTP Les constructeurs TCrtSocket appellent désormais une méthode virtuelle protégée DoCreate, et THttpClientSocket surcharge DoCreate au lieu de redéclarer Create. L’initialisation des sous-classes est préservée sans le conflit de constructeur rencontré par Delphi. Compilateur & plateforme mormot.net.client+1 fd5b3409+24-24

net: fixed Delphi compilation of THttpClientSocket

Impact

La série complète des délais compile de nouveau avec Delphi. FPC suit le même chemin d’initialisation sans exiger de changement du code applicatif.

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

9 Moyenne Le rollback des connexions asynchrones est centralisé avant l’enregistrement La méthode protégée TAsyncConnections.ConnectionAbortAndNil efface la référence de l’appelant, préserve les sockets appartenant à l’appelant, ferme les connexions enregistrées via fSockets et libère directement les instances jamais enregistrées. Correctifs mormot.net.async 3742e9a7+62-25

net: new TAsyncConnections.ConnectionAbortAndNil method

Impact

Les chemins d’échec du framework utilisent désormais une seule règle de propriété, réduisant les risques de double libération et de fuite. Le helper est protégé et n’ajoute pas d’API applicative publique.

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

10 Moyenne La fermeture du tunnel n’appelle plus une closure de transmission absente TTunnelLocal.SendFrame vérifie que fTransmit est assigné avant d’envoyer la trame de fermeture lors de la terminaison du tunnel. Correctifs mormot.net.tunnel fbb9dc6b+1-1

tun - fix nil transmit try to send frame

Impact

La destruction du tunnel évite un appel de closure nil dans les builds Delphi et FPC. Aucune migration du code applicatif n’est requise.

tprudhomme · 08:21 UTC · voir le commit sur GitHub →

11 Moyenne Les sockets gagnent des délais distincts de connexion, d’envoi et de réception TCrtSocket ajoute SetTimeouts et ConnectTimeout, et rend SendTimeout et ReceiveTimeout lisibles en plus d’être modifiables. Les chemins de connexion, proxy, TLS, envoi et réception choisissent la valeur de phase correspondante. Nouveautés mormot.net.sock 221f7715+181-81

net: introduce 3 specific timeouts to TCrtSocket

Impact

Le code Delphi et FPC peut régler séparément une connexion lente et les E/S de requête/réponse. Le code existant utilisant TimeOut continue de fournir la valeur par défaut lorsque les valeurs de phase restent à zéro.

À regarder

API publique

  • TCrtSocket.SetTimeoutsadded
  • TCrtSocket.ConnectTimeoutadded
  • TCrtSocket.SendTimeoutbehaviour-changed — La propriété est désormais lisible en plus d’être modifiable.
  • TCrtSocket.ReceiveTimeoutbehaviour-changed — La propriété est désormais lisible en plus d’être modifiable.

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

12 Moyenne Un seul helper HTTP Kerberos sert désormais Windows et POSIX KerberosServerAuthHeader déplace le helper Negotiate à un aller-retour dans mormot.net.client, rejette NTLM et sert à l’autorisation serveur avec SSPI et GSSAPI. NOKERBEROSCLIENT peut exclure le helper. Nouveautés mormot.lib.gssapi+3 0bc90ef6+79-75

net: new HTTP "Negotiate" KerberosServerAuthHeader() wrapper

Impact

Les serveurs HTTP Delphi et FPC personnalisés peuvent utiliser un même helper public sous Windows et POSIX. Il ne prend en charge qu’un échange Kerberos simple en deux messages, pas NTLM ni une négociation multi-étapes.

À regarder

API publique

  • KerberosServerAuthHeaderadded — Nom multiplateforme final dans mormot.net.client.

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

13 Moyenne Les options HTTP étendues portent trois délais indépendants THttpRequestExtendedOptions ajoute ConnectTimeoutMS, SendTimeoutMS, ReceiveTimeoutMS et GetTimeouts. La sérialisation utilise les champs tm, tc, ts et tr, et les backends HTTP consomment les valeurs résolues lors de l’ouverture des requêtes. Nouveautés mormot.net.client ad936f42+71-13

net: extended THttpRequestExtendedOptions to include the timeouts

Impact

Les applications Delphi et FPC peuvent configurer séparément les phases d’une requête, tandis que les enregistrements à zéro continuent leur fallback via CreateTimeoutMS et les valeurs par défaut du backend.

À regarder

API publique

  • THttpRequestExtendedOptions.ConnectTimeoutMSadded
  • THttpRequestExtendedOptions.SendTimeoutMSadded
  • THttpRequestExtendedOptions.ReceiveTimeoutMSadded
  • THttpRequestExtendedOptions.GetTimeoutsadded

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

14 Moyenne Les clients REST socket appliquent les délais de phase de façon cohérente TRestHttpClientSocket stocke les délais dans fExtendedOptions, les transmet via OpenOptions avant la connexion et les compare pour décider si un socket peut être réutilisé. Les getters TCrtSocket n’utilisent désormais TimeOut que lorsque la valeur de phase vaut 0. Nouveautésinterp mormot.net.sock+1 50ade795+46-36

rest: properly use new THttpClientSocket timeouts

Impact

Les clients REST peuvent conserver des politiques distinctes de connexion, d’envoi et de réception lors des reconnexions. Une valeur de phase négative sur un TCrtSocket actif ne sélectionne plus le fallback historique dans l’implémentation finale.

À regarder

Utilisez 0 pour le fallback historique et testez les reconnexions lorsque des valeurs par phase sont configurées.

Arnaud Bouchez · 21:06 UTC · voir le commit sur GitHub →

15 Moyenne L’authentification REST SSPI peut choisir un keytab POSIX Sous POSIX, TRestServerAuthenticationSspi ajoute une propriété KeyTab basée sur TServerSspiKeyTab. Un fichier valide initialise les identifiants GSSAPI et Idle recharge les keytabs modifiés. Nouveautés mormot.rest.server be652e42+30-2

rest: optional TRestServerAuthenticationSspi.KeyTab support with GSSAPI

Impact

Les serveurs REST POSIX peuvent utiliser un keytab explicite et rechargeable à chaud au lieu de dépendre uniquement des identifiants GSSAPI par défaut. Le comportement SSPI Windows ne change pas.

À regarder

API publique

  • TRestServerAuthenticationSspi.KeyTabadded — Disponible sur les builds POSIX.

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

16 Moyenne Les clients REST installent les délais avant la connexion TRestHttpClientSocket crée et configure désormais THttpClientSocket avant Connect, afin que la connexion, le proxy et l’établissement TLS reçoivent les délais voulus, pas seulement les E/S ultérieures. Nouveautés mormot.rest.http.client 29dc590a+17-6

rest: enhance TRestHttpClientSocket to use the new timeouts

Impact

Les connexions REST peuvent expirer indépendamment pendant l’établissement, l’écriture et la lecture sur les backends Delphi et FPC.

À regarder

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

17 Moyenne Les serveurs asynchrones réveillent les boucles de polling dès le début de l’arrêt TAsyncConnections.Destroy marque fSockets comme terminé avant l’attente et réveille les pollers POSIX de lecture et d’écriture. Les chemins d’arrêt HTTP et proxy associés n’attendent plus les délais normaux du polling. Performance mormot.net.async+1 2b1b93ae+9-4

net: faster async server shutdown

Impact

Les serveurs asynchrones et clients proxy POSIX devraient s’arrêter plus vite et de façon plus prévisible. Les builds Delphi Windows IOCP n’utilisent pas ces branches de réveil.

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

18 Moyenne Les sockets HTTP réutilisent les délais de la socket de base THttpClientSocket supprime les champs et setters de délai dupliqués et utilise le stockage hérité de TCrtSocket. L’attente des en-têtes utilise ReceiveTimeout, tandis que la connexion et TLS utilisent ConnectTimeout. Sous le capot mormot.net.client 9a5f322d+47-74

net: THttpClientSocket can directly use the new TCrtSocket timeouts

Impact

Les clients HTTP existants gardent la même surface de classe, mais la lecture et l’écriture des délais partagent désormais l’implémentation de base. Les applications qui règlent ces délais doivent tester la connexion et l’attente des en-têtes.

À regarder

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

19 Faible Les envois tunnel revérifient le callback de transmission TTunnelLocal.SendFrame exige désormais Assigned(fTransmit) avant d’invoquer le callback, y compris pour la trame de fermeture. Correctifs mormot.net.tunnel 2ccea1a0+6-5

net: minor hardening of TTunnelLocal.SendFrame

Impact

Un tunnel dont le callback de transmission a déjà été effacé évite un appel nil. Aucun changement du code applicatif Delphi ou FPC n’est requis.

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

20 Faible Le parsing Negotiate multiplateforme est extrait du serveur HTTP Une première implémentation ServerSspiAuthHeader extrait de THttpServerSocketGeneric.Authorization le parsing de l’en-tête Authorization, le décodage Base64, le rejet NTLM et la génération de réponse SSPI/GSSAPI. Nouveautés mormot.lib.gssapi+2 9029fa16+59-2

net: new ServerSspiAuthHeader() cross-platform wrapper function

Impact

Il s’agit d’un nom public intermédiaire dans la même édition ; l’API finale est KerberosServerAuthHeader dans mormot.net.client. Les applications ne doivent pas adopter le nom temporaire.

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

21 Faible L’autorisation HTTP Negotiate délègue au helper partagé THttpServerSocketGeneric.Authorization remplace son parsing SSPI/GSSAPI intégré par le helper partagé d’en-tête d’authentification et centralise les accesseurs SspiKeyTab. Sous le capot mormot.net.server 71011fb6+11-48

net: simplified THttpServerSocketGeneric.Authorization NEGOTIATE support

Impact

Le comportement HTTP Negotiate intégré est regroupé sans changement du code applicatif. Windows et POSIX suivent le même chemin de décision à un aller-retour.

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

22 Faible Le flag de connexion asynchrone décrit correctement l’enregistrement La valeur interne TPollAsyncConnectionFlags fInList est renommée fRegistered, et tous les contrôles d’enregistrement, suppression et recyclage utilisent ce nouveau nom. Sous le capot mormot.net.async c7708e55+14-13

net: renamed misleading TPollAsyncConnectionFlags fInList item

Impact

Aucune API publique ni comportement d’exécution ne change. Le renommage facilite l’audit des contrôles de propriété des connexions dans les builds source Delphi et FPC.

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

23 Faible Une table cardinal indexée par octet remplace les alias locaux mormot.core.base publie TByteToCardinal et plusieurs routines de formatage, Unicode, sécurité, cryptographie et HTTP la réutilisent. PurgeHeaders vérifie aussi P plutôt que l’ancien pointeur h avant de lire la longueur d’en-tête. Sous le capot mormot.core.base+6 066e5953+13-12

core: new TByteToCardinal type definition

Impact

Le comportement applicatif reste inchangé hormis la petite correction de garde dans PurgeHeaders. Le type partagé est disponible aux appelants Delphi et FPC ayant besoin d’une table cardinal de 256 entrées.

API publique

  • TByteToCardinaladded

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

24 Faible Les tests d’arrêt asynchrone couvrent le trafic inactif, partiel et en attente test.net.proto étend la couverture async aux sockets inactifs, en-têtes et corps partiels, grandes écritures, clients lents et suivi de connexions désactivé. TPollSockets.Pending est exposé pour les assertions, et TPollAsyncSockets.PollWrite est corrigé en accesseur de lecture. Tests mormot.net.async+2 a84c77d1+179-111

test: enhanced async process coverage

Impact

Les tests ne changent pas le comportement en production. Le code qui ne pouvait pas lire PollWrite peut désormais l’inspecter sur les builds sans IOCP.

API publique

  • TPollSockets.Pendingadded
  • TPollAsyncSockets.PollWritebehaviour-changed — Son accesseur est désormais read fWrite au lieu de write fWrite.

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

25 Faible Le scénario d’arrêt de l’issue 633 devient un test de régression test.net.proto ajoute le scénario d’arrêt HTTP asynchrone signalé et vérifie que les clients inactifs, lents et en attente sont fermés lors de la libération du serveur. Tests test.net.proto 02bd02a7+96-2

test: include regression code from #633

Impact

Les unités de production et API publiques ne changent pas. Le test protège la correction précédente des fuites de connexion dans les exécutions Delphi et FPC.

Arnaud Bouchez · 09:19 UTC · PR #633 · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13