Требует действийможет затронуть работающую системуДокументация TCrtSocket утверждает, что отрицательные phase timeouts возвращают TimeOut, но финальные getters используют fallback только при значении 0. Поэтому для fallback у активного socket рекомендуется 0; точный эффект отрицательного значения зависит от backend.
Асинхронное завершение закрывает утечки, а 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.
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 не зависает до появления несвязанного события.
Рекомендуется обновиться
Приоритетно обновите POSIX и другие non-IOCP async workloads, затем нагрузочно проверьте очередь при переходе workers в idle.
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
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.
Рекомендуется обновиться
Обновите async servers и проверьте destroy с idle clients, partial requests, pending writes и acoNoConnectionTrack.
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 не меняются.
Рекомендуется обновиться
Проверьте failed GET/POST pairing и interrupted RTSP setup, отслеживая число sockets и objects.
Модули
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.
Рекомендуется обновиться
Нагрузочно проверьте failed Open/OpenSocket и убедитесь, что число descriptors возвращается к baseline.
Модули
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.
Рекомендуется обновиться
Включите это исправление destructor при развёртывании более широких async ownership changes.
Модули
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 не затронуты.
Рекомендуется обновиться
На epoll deployments отслеживайте open file descriptors при повторных стартах и остановках async services.
Модули
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 не требуются.
Рекомендуется обновиться
Если вы взяли любой из новых timeout-коммитов, используйте build 2.4.17398 или новее.
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.
Модули
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 не требуется.
Рекомендуется обновиться
Возьмите исправление вместе с соседними tunnel cleanup-коммитами перед тестированием teardown.
Модули
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.SetTimeoutsaddedTCrtSocket.ConnectTimeoutaddedTCrtSocket.SendTimeoutbehaviour-changed — Свойство теперь доступно и для чтения.TCrtSocket.ReceiveTimeoutbehaviour-changed — Свойство теперь доступно и для чтения.
Модули
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.
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.ConnectTimeoutMSaddedTHttpRequestExtendedOptions.SendTimeoutMSaddedTHttpRequestExtendedOptions.ReceiveTimeoutMSaddedTHttpRequestExtendedOptions.GetTimeoutsadded
Модули
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 и проверьте переподключение при настроенных значениях фаз.
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.
Модули
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 могут независимо ограничивать установление, запись и чтение.
Стоит взглянуть
Модули
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.
Рекомендуется обновиться
Повторно проверьте задержку shutdown POSIX server и убедитесь, что read/write pollers быстро завершаются.
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.
Стоит взглянуть
Модули
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 не требуются.
Модули
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. Приложениям не следует использовать временное имя.
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.
Модули
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.
Модули
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
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.PendingaddedTPollAsyncSockets.PollWritebehaviour-changed — Accessor теперь read fWrite вместо write fWrite.
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.