mORMot2 DailyЕжедневный обзор коммитов апстрима

Асинхронное завершение закрывает утечки, а HTTP-таймауты разделены по фазам

Это значимый сетевой выпуск. Асинхронные серверы, туннели и RTSP-over-HTTP получили согласованное исправление владения и завершения, а TSynThreadPool устранил гонку, из-за которой работа в очереди могла остаться без пробуждения. HTTP-клиенты получили отдельные таймауты подключения, отправки и приёма, а серверная Kerberos-аутентификация объединена в кроссплатформенном wrapper с удалением одного публичного метода.

Коротко

  • 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.

Рекомендации по обновлению

Обновите асинхронные серверы, туннели и RTSP до финального build 2.4.17398 и проверьте завершение при idle-соединениях, частичных запросах и ожидающей записи. Пользователям Delphi не следует останавливаться на 2.4.17393–2.4.17397. Найдите TServerSspiKeyTab.ComputeServerHeader и замените прямые вызовы на KerberosServerAuthHeader.

Сборка2.4.17372 → 2.4.17398
Коммиты26
Строки+1199 -716
Чтение5 мин

25 из 25 записей · 26 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Критический Гонка пробуждения thread pool могла оставить работу в очереди TSynThreadPool.PopPendingContext теперь принимает вызывающий thread и очищает его fProcessingContext под fPendingSafe. Проверка очереди и публикация idle-состояния worker становятся атомарными относительно Push. Исправления mormot.core.threads+1 4860cac1+18-20

core: fixed TSynThreadPool.PopPendingContext race condition

Влияние

На путях thread pool без IOCP Push больше не ставит задачу за worker, который собирается уснуть без пробуждения. Pending async work не зависает до появления несвязанного события.

Arnaud Bouchez · 14:10 UTC · открыть коммит на GitHub →

2 Высокий Прямой keytab-метод HTTP-аутентификации удалён TServerSspiKeyTab.ComputeServerHeader удалён. TServerSspiKeyTab получил FileSetter и nil-safe getter KeyTab, а ServerSspiDataNtlm теперь проверяет наличие минимум четырёх байтов перед чтением cardinal. Несовместимые изменения mormot.lib.gssapi+1 03373d42+46-61

lib: removed TServerSspiKeyTab.ComputeServerHeader

Влияние

Приложения с вызовом ComputeServerHeader больше не компилируются. Короткие malformed SSPI/GSSAPI tokens отклоняются без out-of-bounds чтения cardinal.

Требуется миграция

Найдите TServerSspiKeyTab.ComputeServerHeader. Используйте KerberosServerAuthHeader; на POSIX сначала вызовите PrepareKeyTab для конкретного keytab.

Публичный API

  • TServerSspiKeyTab.ComputeServerHeaderremoved — Используйте KerberosServerAuthHeader из mormot.net.client.
  • TServerSspiKeyTab.FileSetteradded

Arnaud Bouchez · 11:54 UTC · открыть коммит на GitHub →

3 Высокий Async server shutdown теперь владеет всеми путями выхода соединений TAsyncConnections закрывает pending reads, ждёт workers и accept loops, освобождает tracked connections, разрешает финальное добавление в GC и исправляет порядок ConnectionDelete и EndConnection. Пути ошибки client request теперь согласованно abort переданные соединения. Исправления mormot.net.async+1 c87c00ab+92-50

net: avoid connection leaks in async server

Влияние

Долго работающие async servers Delphi и FPC избегают утечек connection objects и sockets при shutdown, failed accept и ошибках client setup. Destroy ждёт стабилизации ownership workers перед освобождением shared state.

Arnaud Bouchez · 09:08 UTC · открыть коммит на GitHub →

4 Высокий Настройка RTSP-over-HTTP очищает каждое частично принятое соединение TRtspOverHttpServer.ConnectionCreate явно отслеживает ownership соединений GET, POST и RTSP и освобождает каждый object или raw RTSP socket в finally, если ownership не был успешно передан. Исправления mormot.net.rtsphttp 213dd8c6+50-33

net: fixed potential leaks in TRtspOverHttpServer

Влияние

Failed или interrupted pairing RTSP-over-HTTP больше не приводит к утечке sockets и connection objects. API приложений Delphi и FPC не меняются.

Arnaud Bouchez · 08:15 UTC · открыть коммит на GitHub →

5 Высокий Пути ошибки туннеля закрывают оба endpoint sockets TTunnelLocalThread.Destroy закрывает fServerSock и fClientSock, а TTunnelLocal.Open и OpenSocket используют ShutdownAndClose и обнуляют переданные sockets при исключениях и failed setup. Исправления mormot.net.tunnel 2eb90dbc+17-5

net: fixed FD socket leak in TTunnelLocal

Влияние

Повторные failed tunnel opens больше не накапливают file descriptors или socket handles на целях POSIX, Delphi и FPC.

Модули

Arnaud Bouchez · 08:21 UTC · открыть коммит на GitHub →

6 Высокий Destroy async connection закрывает sockets, оставшиеся после Stop TPollAsyncConnection.Destroy освобождает fSecure, задаёт linger для немедленного закрытия и вызывает ShutdownAndClose, если fSocket остаётся assigned после Stop. Исправления mormot.net.async 5707c869+19-2

net: fixed TPollAsyncConnection.Destroy

Влияние

Destroy частично остановленного async connection больше не оставляет socket handle открытым. Исправление применяется к async backends Delphi и FPC.

Модули

Arnaud Bouchez · 07:43 UTC · открыть коммит на GitHub →

7 Высокий Epoll unsubscribe закрывает sockets даже при ошибке удаления TPollSocketEpoll.Unsubscribe переносит закрытие raw socket за пределы ветви успеха EPOLL_CTL_DEL при fUnsubscribeShutdownSocket. Socket закрывается и когда epoll descriptor уже недоступен. Исправления mormot.net.sock 54de4647+11-10

net: fixed leaking socket FD in TPollSocketEpoll.Unsubscribe

Влияние

Linux и другие epoll-based servers больше не теряют file descriptors при гонке unsubscribe с teardown или ошибке EPOLL_CTL_DEL. Windows и non-epoll backends не затронуты.

Модули

Arnaud Bouchez · 06:34 UTC · открыть коммит на GitHub →

8 Высокий Компиляция Delphi восстановлена после рефакторинга HTTP-таймаутов Конструкторы TCrtSocket теперь вызывают защищённый virtual DoCreate, а THttpClientSocket переопределяет DoCreate вместо повторного объявления Create. Инициализация подкласса сохраняется без конфликта конструктора в Delphi. Компилятор и платформы mormot.net.client+1 fd5b3409+24-24

net: fixed Delphi compilation of THttpClientSocket

Влияние

Завершённая серия таймаутов снова компилируется в Delphi. FPC использует тот же путь инициализации, но изменения application code не требуются.

Arnaud Bouchez · 21:12 UTC · открыть коммит на GitHub →

9 Средний Rollback async connections централизован до регистрации Защищённый метод TAsyncConnections.ConnectionAbortAndNil очищает ссылку caller, сохраняет принадлежащие caller sockets, закрывает зарегистрированные соединения через fSockets и напрямую освобождает никогда не зарегистрированные instances. Исправления mormot.net.async 3742e9a7+62-25

net: new TAsyncConnections.ConnectionAbortAndNil method

Влияние

Пути ошибки framework теперь используют единое правило ownership, снижая риск double-free и утечек. Helper защищённый и не добавляет public application API.

Модули

Arnaud Bouchez · 08:09 UTC · открыть коммит на GitHub →

10 Средний Закрытие туннеля больше не вызывает отсутствующую transmit closure TTunnelLocal.SendFrame проверяет Assigned(fTransmit) перед отправкой closing frame при завершении туннеля. Исправления mormot.net.tunnel fbb9dc6b+1-1

tun - fix nil transmit try to send frame

Влияние

Tunnel teardown избегает вызова nil closure в builds Delphi и FPC. Миграция application code не требуется.

Модули

tprudhomme · 08:21 UTC · открыть коммит на GitHub →

11 Средний Sockets получили отдельные таймауты подключения, отправки и приёма TCrtSocket добавляет SetTimeouts и ConnectTimeout, а SendTimeout и ReceiveTimeout становятся доступными и для чтения. Пути подключения, proxy, TLS, отправки и приёма выбирают значение своей фазы. Новые возможности mormot.net.sock 221f7715+181-81

net: introduce 3 specific timeouts to TCrtSocket

Влияние

Код Delphi и FPC может отдельно настраивать медленное подключение и I/O запросов/ответов. Существующий TimeOut остаётся default, пока значения фаз равны нулю.

Стоит взглянуть

Публичный API

  • TCrtSocket.SetTimeoutsadded
  • TCrtSocket.ConnectTimeoutadded
  • TCrtSocket.SendTimeoutbehaviour-changed — Свойство теперь доступно и для чтения.
  • TCrtSocket.ReceiveTimeoutbehaviour-changed — Свойство теперь доступно и для чтения.

Модули

Arnaud Bouchez · 16:32 UTC · открыть коммит на GitHub →

12 Средний Единый Kerberos HTTP helper теперь работает на Windows и POSIX KerberosServerAuthHeader переносит single-roundtrip Negotiate helper в mormot.net.client, отклоняет NTLM и используется серверной авторизацией через SSPI и GSSAPI. NOKERBEROSCLIENT позволяет исключить helper. Новые возможности mormot.lib.gssapi+3 0bc90ef6+79-75

net: new HTTP "Negotiate" KerberosServerAuthHeader() wrapper

Влияние

Пользовательские HTTP servers на Delphi и FPC могут использовать один public helper на Windows и POSIX. Поддерживается только простой двухсообщенческий Kerberos exchange, без NTLM и multi-round negotiation.

Стоит взглянуть

Публичный API

  • KerberosServerAuthHeaderadded — Финальное кроссплатформенное имя в mormot.net.client.

Arnaud Bouchez · 12:18 UTC · открыть коммит на GitHub →

13 Средний Расширенные HTTP options несут три независимых таймаута THttpRequestExtendedOptions добавляет ConnectTimeoutMS, SendTimeoutMS, ReceiveTimeoutMS и GetTimeouts. Сериализация использует поля tm, tc, ts и tr, а HTTP backends применяют разрешённые значения при открытии запросов. Новые возможности mormot.net.client ad936f42+71-13

net: extended THttpRequestExtendedOptions to include the timeouts

Влияние

Приложения Delphi и FPC могут настраивать фазы запроса отдельно, а существующие нулевые records продолжают fallback через CreateTimeoutMS и defaults backend.

Стоит взглянуть

Публичный API

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

Модули

Arnaud Bouchez · 17:11 UTC · открыть коммит на GitHub →

14 Средний REST socket clients согласованно применяют таймауты фаз TRestHttpClientSocket хранит таймауты в fExtendedOptions, передаёт их через OpenOptions до подключения и сравнивает при решении о повторном использовании socket. Getters TCrtSocket теперь используют TimeOut только при значении фазы 0. Новые возможностиinterp mormot.net.sock+1 50ade795+46-36

rest: properly use new THttpClientSocket timeouts

Влияние

REST clients сохраняют отдельные политики подключения, отправки и приёма при переподключении. В финальной реализации отрицательное значение фазы активного TCrtSocket не выбирает legacy fallback.

Стоит взглянуть

Используйте 0 для legacy fallback и проверьте переподключение при настроенных значениях фаз.

Arnaud Bouchez · 21:06 UTC · открыть коммит на GitHub →

15 Средний REST SSPI-аутентификация может выбрать POSIX keytab На POSIX TRestServerAuthenticationSspi добавляет свойство KeyTab на базе TServerSspiKeyTab. Корректный файл инициализирует GSSAPI credentials, а Idle обновляет изменённые keytab files. Новые возможности mormot.rest.server be652e42+30-2

rest: optional TRestServerAuthenticationSspi.KeyTab support with GSSAPI

Влияние

POSIX REST servers могут использовать явный и hot-refreshable keytab вместо зависимости только от default GSSAPI credentials. Поведение Windows SSPI не меняется.

Стоит взглянуть

Публичный API

  • TRestServerAuthenticationSspi.KeyTabadded — Доступно в POSIX builds.

Модули

Arnaud Bouchez · 11:57 UTC · открыть коммит на GitHub →

16 Средний REST clients устанавливают timeout policy до подключения TRestHttpClientSocket теперь создаёт и настраивает THttpClientSocket до Connect, поэтому нужные таймауты применяются к подключению, proxy и TLS setup, а не только к последующему I/O. Новые возможности mormot.rest.http.client 29dc590a+17-6

rest: enhance TRestHttpClientSocket to use the new timeouts

Влияние

REST-соединения на Delphi и FPC backends могут независимо ограничивать установление, запись и чтение.

Стоит взглянуть

Arnaud Bouchez · 16:45 UTC · открыть коммит на GitHub →

17 Средний Async servers будят poll loops сразу при начале завершения TAsyncConnections.Destroy помечает fSockets terminated до ожидания и будит POSIX read/write pollers. Связанные HTTP и proxy shutdown paths больше не ждут обычных poll timeouts. Производительность mormot.net.async+1 2b1b93ae+9-4

net: faster async server shutdown

Влияние

POSIX async servers и proxy clients должны завершаться быстрее и предсказуемее. Delphi Windows IOCP builds не используют эти ветви poll wake-up.

Arnaud Bouchez · 12:44 UTC · открыть коммит на GitHub →

18 Средний HTTP sockets используют базовую реализацию таймаутов THttpClientSocket удаляет дублирующие поля и setters таймаутов и использует хранилище TCrtSocket. Ожидание headers использует ReceiveTimeout, а подключение и TLS setup — ConnectTimeout. Внутреннее устройство mormot.net.client 9a5f322d+47-74

net: THttpClientSocket can directly use the new TCrtSocket timeouts

Влияние

Существующие HTTP clients сохраняют поверхность класса, но чтение и запись таймаутов теперь используют базовую реализацию. Приложениям с настройкой таймаутов стоит проверить подключение и ожидание response headers.

Стоит взглянуть

Модули

Arnaud Bouchez · 16:38 UTC · открыть коммит на GitHub →

19 Низкий Tunnel sends повторно проверяют transmit callback TTunnelLocal.SendFrame теперь требует Assigned(fTransmit) перед вызовом callback, включая путь closing frame. Исправления mormot.net.tunnel 2ccea1a0+6-5

net: minor hardening of TTunnelLocal.SendFrame

Влияние

Туннель с уже очищенным transmit callback не вызывает nil callback. Изменения application code для Delphi или FPC не требуются.

Модули

Arnaud Bouchez · 14:41 UTC · открыть коммит на GitHub →

20 Низкий Кроссплатформенный Negotiate parsing вынесен из HTTP server Первая реализация ServerSspiAuthHeader выносит из THttpServerSocketGeneric.Authorization parsing заголовка Authorization, Base64 decoding, отклонение NTLM и генерацию SSPI/GSSAPI response. Новые возможности mormot.lib.gssapi+2 9029fa16+59-2

net: new ServerSspiAuthHeader() cross-platform wrapper function

Влияние

Это промежуточное public name в том же выпуске; финальный API — KerberosServerAuthHeader в mormot.net.client. Приложениям не следует использовать временное имя.

Arnaud Bouchez · 11:52 UTC · открыть коммит на GitHub →

21 Низкий HTTP Negotiate authorization делегирует общему helper THttpServerSocketGeneric.Authorization заменяет встроенный SSPI/GSSAPI parsing общим helper для authentication header и централизует accessors SspiKeyTab. Внутреннее устройство mormot.net.server 71011fb6+11-48

net: simplified THttpServerSocketGeneric.Authorization NEGOTIATE support

Влияние

Встроенное поведение HTTP Negotiate объединено без изменения application code. Windows и POSIX используют один single-roundtrip decision path.

Модули

Arnaud Bouchez · 11:55 UTC · открыть коммит на GitHub →

22 Низкий Флаг async connection теперь точно описывает регистрацию Внутреннее значение TPollAsyncConnectionFlags fInList переименовано в fRegistered; все проверки регистрации, удаления и recycling используют новое имя. Внутреннее устройство mormot.net.async c7708e55+14-13

net: renamed misleading TPollAsyncConnectionFlags fInList item

Влияние

Public API и runtime behavior не меняются. Переименование упрощает аудит ownership checks соединений в source builds Delphi и FPC.

Модули

Arnaud Bouchez · 09:27 UTC · открыть коммит на GitHub →

23 Низкий Общая byte-indexed cardinal table заменяет локальные aliases mormot.core.base публикует TByteToCardinal, которую повторно используют routines форматирования, Unicode, security, cryptography и HTTP. PurgeHeaders также проверяет P вместо устаревшего указателя h перед чтением длины header. Внутреннее устройство mormot.core.base+6 066e5953+13-12

core: new TByteToCardinal type definition

Влияние

Поведение приложений не меняется, кроме небольшой коррекции guard в PurgeHeaders. Общий тип доступен callers Delphi и FPC, которым нужна cardinal lookup table на 256 элементов.

Публичный API

  • TByteToCardinaladded

Arnaud Bouchez · 09:32 UTC · открыть коммит на GitHub →

24 Низкий Тесты async shutdown охватывают idle, partial и pending traffic test.net.proto расширяет async coverage для idle sockets, частичных headers и bodies, больших записей, медленных клиентов и отключённого connection tracking. TPollSockets.Pending открыт для assertions, а TPollAsyncSockets.PollWrite исправлен на read accessor. Тесты mormot.net.async+2 a84c77d1+179-111

test: enhanced async process coverage

Влияние

Тесты не меняют production behavior. Код, который раньше не мог читать PollWrite, теперь может проверять его в non-IOCP builds.

Публичный API

  • TPollSockets.Pendingadded
  • TPollAsyncSockets.PollWritebehaviour-changed — Accessor теперь read fWrite вместо write fWrite.

Arnaud Bouchez · 12:58 UTC · открыть коммит на GitHub →

25 Низкий Сценарий shutdown из issue 633 стал regression test test.net.proto добавляет сообщённый сценарий async HTTP shutdown и проверяет закрытие idle, slow и pending clients при освобождении server instance. Тесты test.net.proto 02bd02a7+96-2

test: include regression code from #633

Влияние

Production units и public API не меняются. Тест защищает предыдущее исправление connection leaks в тестовых запусках Delphi и FPC.

Модули

Arnaud Bouchez · 09:19 UTC · PR #633 · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
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