mORMot2 DailyLecture quotidienne des commits upstream

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.

Build2.4.17019 → 2.4.17024
Commits5
Lignes+180 -116
Lecture2 min

5 sur 5 entrées · 5 commits upstream

Sujets
# Entrée Catégorie Unités
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.

API publique

  • TShort95added — Un alias public string[95] et son type pointeur PShort95 sont maintenant disponibles.

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

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.

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

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.

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

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.

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

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.

Arnaud Bouchez · 14:24 UTC · 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