Agir maintenantpeut affecter un système en productionLe payload brut contient cinq commits non-merge et aucun merge ; chacun est couvert ci-dessous. Il ne contient ni avis de dépréciation ni marqueur superseded_by. La plage à éviter est étayée par la correction directe de CheckProc en build 17024 dans ce même payload.
OpenSSL async réessaie correctement et TSynLog réduit son verrou d’écriture
Les clients et serveurs non bloquants utilisant OpenSSL réessaient maintenant SSL_connect et SSL_accept après WANT_READ ou WANT_WRITE au lieu de les traiter comme fatals. Le commit final conserve le premier résultat SSL_get_error afin de signaler la vraie cause d’un échec. TSynLog déplace aussi la collecte de stack trace et d’informations système hors de son verrou writer, avec moins de contention mais un état par thread plus grand et des suffixes bornés.
En bref
- Visez la build 2.4.17024 au commit 13c7b4dd94b23c25d51e5b0ab9b6e207cb039207.
- Les handshakes TLS OpenSSL sur sockets async réessaient WANT_READ et WANT_WRITE pendant cinq secondes au maximum.
- Évitez les builds 2.4.17020 à 2.4.17023 : la nouvelle boucle relit SSL_get_error lors d’un échec final ; 2.4.17024 transmet le code déjà capturé.
- TSynLog pré-rend les stack traces et informations système configurées avant de prendre son verrou par writer.
- Le record thread TSynLog grandit de 320 octets ; les suffixes stack trace sont limités à 255 octets et les informations système à 63.
- AppendSysInfo est un nouveau helper public qui ajoute les informations système sans vider la ShortString existante.
Conseil de mise à jour
Visez la build 2.4.17024. Les utilisateurs OpenSSL avec sockets non bloquants doivent tester SSL_connect côté client et SSL_accept côté serveur sous WANT_READ, WANT_WRITE, timeout et erreur de certificat. Ne restez pas sur 2.4.17020–2.4.17023 : le reporting final du retry est incomplet. Avec LevelStackTrace ou LevelSysInfo, comparez les suffixes et comptez 320 octets thread-local supplémentaires par thread de log.
5 sur 5 entrées · 5 commits upstream
1
Élevée
Les handshakes OpenSSL non bloquants attendent au lieu d’échouer immédiatement
TOpenSslNetTls.AfterConnection et AfterAccept appellent maintenant CheckProc autour de SSL_connect et SSL_accept. CheckProc réessaie SSL_ERROR_WANT_READ ou SSL_ERROR_WANT_WRITE, attend les TNetEvents correspondants et impose une deadline de cinq secondes. TShort95 et PShort95 sont aussi ajoutés.
Correctifs
mormot.core.base+1
1e45eae5+43-6
lib: fixed unexpected TLS exception with OpenSSL async socket
Impact
Les clients et serveurs async utilisant OpenSSL ne transforment plus une transition normale du handshake non bloquant en exception EOpenSsl. Un handshake bloqué lève un timeout explicite après cinq secondes.
Mise à jour recommandée
Passez directement à la build 2.4.17024 et testez les handshakes client/serveur non bloquants ; ne déployez pas cette première implémentation seule.
API publique
TShort95added — Un alias public string[95] et son type pointeur PShort95 sont maintenant disponibles.
2
Élevée
Les échecs TLS conservent l’erreur capturée près de SSL_connect
EOpenSsl.CheckFailed accepte un sslerrcode optionnel. TOpenSslNetTls.CheckProc transmet l’erreur renvoyée par CheckSsl immédiatement après SSL_connect ou SSL_accept, évitant un second SSL_get_error après d’autres opérations.
Correctifs
mormot.lib.openssl11
13c7b4dd+10-6
lib: fixed TOpenSslNetTls.CheckProc error report
Impact
Les échecs finaux de certificat, protocole ou pair sur le nouveau chemin async signalent l’état SSL_ERROR_* original et son contexte de vérification au lieu d’un code obsolète.
Mise à jour recommandée
Passez à la build 2.4.17024 et vérifiez que certificats rejetés et protocoles incompatibles produisent les détails EOpenSsl attendus.
Unités
3
Moyenne
Les suffixes stack et système sont rendus avant le verrou de log
TSynLog.LockAndPrepareWrite remplit maintenant les buffers thread-local StackTrace et SysInfo avant fWriteSafe.Lock. LogTrailerAndUnlock ajoute ces buffers puis libère le verrou. TSynLogThreadInfo gagne une ShortString de 255 octets et une TShort63, soit 320 octets supplémentaires par thread.
Performance
mormot.core.log
b1ddba46+80-60
core: TSynLog pre-renders the stack trace and the sysinfo
Impact
Le chargement lent des symboles et les requêtes OS n’allongent plus la section sérialisée d’écriture. Les services avec beaucoup de threads consomment plus de mémoire thread-local, et les suffixes sont limités à 255 et 63 octets.
À regarder
Si LevelStackTrace ou LevelSysInfo est activé, comparez les suffixes et mesurez contention et mémoire thread-local sur une charge représentative.
API publique
TSynLogFamily.LevelStackTracebehaviour-changed — Les stack traces configurées sont pré-rendues hors du verrou et limitées à 255 AnsiChars.TSynLogFamily.LevelSysInfobehaviour-changed — Les suffixes d’informations système sont pré-rendus hors du verrou dans TShort63.
Unités
4
Faible
Les informations système peuvent être ajoutées à un texte court existant
mormot.core.os expose AppendSysInfo, qui ajoute processeur, charge, uptime et mémoire à une ShortString sans la vider. RetrieveSysInfoText efface désormais la destination puis délègue au nouveau helper. Un writeln résiduel de CheckProc est supprimé.
Nouveautés
mormot.core.os+1
ea2c5066+11-4
core: new AppendSysInfo() function
Impact
Les appelants de RetrieveSysInfoText gardent la sémantique de remplacement. Les nouveaux appelants peuvent construire des diagnostics préfixés dans une ShortString bornée, et les retries OpenSSL n’écrivent plus sur la sortie standard.
API publique
AppendSysInfoadded — La procédure ajoute les informations système à la ShortString fournie sans réinitialiser son contenu.
5
Faible
L’enregistrement des debug files évite un verrou exclusif inutile
DebugFileRegister vérifie l’arrêt et les bibliothèques déjà inconnues sous DebugFilesSafe.ReadLock avant WriteLock, puis revérifie dans la section d’écriture. RawStackTrace simplifie sa garde d’exception et AppendCallerShort ne résout plus les symboles hors de l’exécutable.
Sous le capot
mormot.core.log
d09fc6cd+36-40
core: some TSynLog and stack trace refactoring
Impact
La résolution répétée de bibliothèques sans debug data ne sérialise plus tous les lecteurs derrière un write lock. AppendCallerShort se limite aux informations de l’exécutable ; FindLocationShort résout toujours les bibliothèques externes.
API publique
TDebugFile.AppendCallerShortbehaviour-changed — Les stacks appelantes n’incluent plus les noms ou symboles de fallback pour les frames hors de l’exécutable.