Agir maintenantpeut affecter un système en productionLa documentation de TCrtSocket indique que des délais de phase négatifs restaurent TimeOut, mais les getters finaux ne font le fallback que lorsque la valeur stockée vaut 0. Cette revue recommande donc 0 pour le fallback d’un socket actif ; l’effet exact d’une valeur négative dépend du backend.
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.
25 sur 25 entrées · 26 commits upstream
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.
Mise à jour recommandée
Priorisez cette mise à jour pour les charges asynchrones POSIX et autres chemins sans IOCP, puis stressez la file lors du passage des workers à l’état inactif.
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
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é.
Mise à jour recommandée
Mettez à niveau les serveurs asynchrones et testez la destruction avec des clients inactifs, requêtes partielles, écritures en attente et acoNoConnectionTrack.
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.
Mise à jour recommandée
Testez l’échec d’appairage GET/POST et l’interruption de la préparation RTSP tout en surveillant le nombre de sockets et d’objets.
Unités
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.
Mise à jour recommandée
Stressez les échecs de Open et OpenSocket et vérifiez que le nombre de descripteurs revient à sa valeur initiale.
Unités
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.
Mise à jour recommandée
Incluez cette correction du destructeur lors du déploiement des changements plus larges de propriété asynchrone.
Unités
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.
Mise à jour recommandée
Sur les déploiements epoll, surveillez les descripteurs ouverts lors de démarrages et arrêts répétés des services asynchrones.
Unités
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.
Mise à jour recommandée
Utilisez le build 2.4.17398 ou ultérieur si vous avez pris l’un des nouveaux commits de délai.
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.
Unités
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.
Mise à jour recommandée
Prenez cette correction avec les commits de nettoyage du tunnel avant de tester sa destruction.
Unités
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.SetTimeoutsaddedTCrtSocket.ConnectTimeoutaddedTCrtSocket.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.
Unités
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.
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.ConnectTimeoutMSaddedTHttpRequestExtendedOptions.SendTimeoutMSaddedTHttpRequestExtendedOptions.ReceiveTimeoutMSaddedTHttpRequestExtendedOptions.GetTimeoutsadded
Unités
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.
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.
Unités
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
Unités
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.
Mise à jour recommandée
Retestez la latence d’arrêt du serveur POSIX et confirmez que les pollers de lecture et d’écriture quittent rapidement.
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
Unités
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.
Unités
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.
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.
Unités
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.
Unités
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
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.PendingaddedTPollAsyncSockets.PollWritebehaviour-changed — Son accesseur est désormais read fWrite au lieu de write fWrite.
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.