Требует действийможет затронуть работающую системуПроверены все 27 non-merge commits от 2.4.17294 до 2.4.17324: 779 добавлений и 316 удалений без version bookkeeping. Три merge commits исключены. Проверен точный upstream head. superseded_by отсутствует; порядок основан на проверенных follow-ups без avoid range.
Deadlock в WebSocket устранён, TLS и логирование исключений стабилизированы
Async WebSocket broadcast и RTSP forwarding больше не отправляют данные под connection read lock, устраняя deadlock при удалении peer после failed write. SChannel трактует корректное закрытие во время отправки как closed connection и завершает поддержку TLS 1.3 renegotiation. Исправлен перехват исключений между потоками, в Delphi Win32 и Delphi POSIX, а AVX-512 detection теперь проверяет сохранение ZMM state операционной системой.
Коротко
- Переходите на build 2.4.17324 в 05e40cd692d391efb62ed97f78f264867477e8e5.
- TWebSocketAsyncServer.WebSocketBroadcast и TPostConnection.OnRead больше не deadlock при удалении соединения после failed send.
- SChannel send возвращает nrClosed при корректном shutdown, а receive path обрабатывает TLS 1.3 SEC_I_RENEGOTIATE.
- Concurrent exceptions больше не теряются, дубли Delphi Win32 подавлены, Delphi POSIX получил interception.
- IntelAvx512 стал вычисляемой при запуске переменной с фильтром XCR0; cpuAVX512 обозначает включённый OS уровень x86-64-v4.
- Windows http.sys WebSocket regression test для issue #418 отключён из-за нестабильности на Windows 11.
Рекомендации по обновлению
Переходите на build 2.4.17324. Срочно обновитесь при использовании TWebSocketAsyncServer.WebSocketBroadcast, RTSP-over-HTTP forwarding, Windows SChannel, TTunnelLocal или при зависимости от полных exception logs под нагрузкой. Проверьте broadcast при reset clients, TLS 1.3 key update, peer shutdown и ClosePort во время WaitForHandshake. superseded_by отсутствует, поэтому формальный avoid range не заявляется; берите серии целиком. Отдельно следите за issue #418: Windows http.sys WebSocket test отключён.
27 из 27 записей · 30 коммитов в апстриме
1
Высокий
WebSocket broadcast использует безопасные snapshots для обоих timeout modes
GetConnectionHandles/GetConnectionInstances обходят реальный массив class references. WebSocketBroadcast использует instance snapshots только при timeout 0, handles для blocking send и проверяет ConnectionFind на nil.
Исправления
mormot.net.async+1
f253c603+53-40
net: properly fixed #629
Влияние
Broadcast к конкурентно закрывающимся peers больше не рискует deadlock или nil dereference, а non-blocking path избегает повторных searches.
Рекомендуется обновиться
Обновитесь и нагрузочно проверьте broadcast с aTimeOut=0 и ненулевым при reset/disconnect clients.
Публичный API
TWebSocketAsyncServer.WebSocketBroadcastbehaviour-changed
2
Высокий
SChannel продолжает handshake при TLS 1.3 key update
TSChannelNetTls.Receive распознаёт SEC_I_RENEGOTIATE и передаёт остаток input в HandshakeStep. Test client может запросить SSL_key_update в середине передачи; добавлен TBuffer32K.
Исправления
mormot.core.base+3
8e6133ef+56-26
net: SChannel fixes and new tests about TLS 1.3 renegotiation
Влияние
Долгоживущие SChannel TLS 1.3 connections переживают peer key update вместо сбоя после SEC_I_RENEGOTIATE.
Рекомендуется обновиться
Проверьте долгие TLS 1.3 transfers и peer-initiated key update на Windows 11.
Публичный API
TBuffer32Kadded
3
Высокий
Закрытие SChannel socket сообщается без shutdown exceptions
NetErrorFromSystem переводит WSAENOTCONN и WSAESHUTDOWN в nrClosed. TSChannelNetTls.SendRawAll возвращает TNetResult, callers останавливаются при закрытии, receive errors включают нормализованный результат.
Исправления
mormot.net.sock+1
2d800eaa+46-26
net: several fixes to SChannel socket closure
Влияние
Нормальный Windows TLS teardown больше не выглядит как fatal ESChannel, включая отправку handshake tokens и encrypted output.
Рекомендуется обновиться
Перепроверьте client disconnect во время SChannel handshake, больших writes и server shutdown.
Публичный API
NetErrorFromSystembehaviour-changed
4
Высокий
WebSocket broadcast освобождает connection read lock до записи
WebSocketBroadcast копирует destination handles под ConnectionLock.ReadOnlyLock, освобождает его, затем кодирует и отправляет через ConnectionFind. Документация предупреждает, что Write может вызвать ConnectionDelete и не должен выполняться под read lock.
Исправления
mormot.net.async+1
fd8b176f+25-15
net: fixed TWebSocketAsyncServer.WebSocketBroadcast deadlock when a send fails
Влияние
Failed broadcast send может удалить connection без upgrade read lock и deadlock async server. Поздние commits завершают nil/lifetime handling.
5
Высокий
Concurrent exceptions больше не исчезают из TSynLog
Exception handlers больше не очищают global _RawLogException при каждом log. Recursion подавляется per-thread через PerThreadInfo.ExceptionIgnore, поэтому handler других потоков остаётся активным.
Исправления
mormot.core.os+1
6b486e00+18-17
core: fixed Exception diseappearing in logs on multi-thread process :(
Влияние
Исключения, одновременно поднятые в разных потоках, больше не пропускаются. Затронуты concurrent Delphi/FPC services.
Рекомендуется обновиться
Создайте одновременные handled exceptions в worker threads и убедитесь, что каждая появляется в TSynLog ровно один раз.
Модули
6
Высокий
WebSocket clients и local tunnels безопасно публикуют shutdown state
TTunnelLocal.ClosePort ставит fClosed под fSendSafe, THttpClientWebSockets.Destroy использует FreeAndNilSafe, а callback requests берут fProtocol.ConnectionFlags напрямую.
Исправления
mormot.net.tunnel+1
b60779e1+5-5
net: hardened THttpClientWebSockets shutdown
Влияние
Tunnel senders и WaitForHandshake observers видят closure в согласованном порядке, а уничтожение WebSocket client безопаснее при concurrent callbacks.
Рекомендуется обновиться
Проверьте ClosePort во время WaitForHandshake и уничтожение WebSocket clients при активных callbacks.
7
Высокий
Корректное закрытие SChannel при send теперь возвращает nrClosed
TSChannelNetTls.SendRawAll задаёт nrClosed до обработки zero-byte send, поэтому корректный peer shutdown завершает вызов без ESChannel.
Исправления
mormot.net.sock.windows
1a03af2e+5-4
net: fixed graceful disconnection during SChannel sending
Влияние
Windows TLS clients и servers могут закрываться во время pending send без превращения normal shutdown в exception.
Рекомендуется обновиться
Обновитесь и проверьте peer shutdown во время отправки больших SChannel requests/responses.
Модули
8
Высокий
RTSP-over-HTTP forwarding больше не пишет под ConnectionLock
TPostConnection.OnRead заменяет ConnectionFindAndLock(cReadOnly) на ConnectionFind перед WriteString, поскольку failed write может вызвать ConnectionDelete и запросить тот же lock в write mode.
Исправления
mormot.net.rtsphttp
a1c8844a+3-4
net: fixed TPostConnection.OnRead holding ConnectionLock during WriteString()
Влияние
RTSP-over-HTTP POST forwarding больше не deadlock, если связанное RTSP connection исчезает во время write.
Рекомендуется обновиться
Нагрузочно проверьте RTSP-over-HTTP clients, отключающиеся во время forwarding POST commands.
Модули
9
Средний
Современный Delphi использует один exception hook без дублей
SynRaiseProc обобщён для RaiseExceptObjProc; Windows vectored/unwind handlers пропускают уже обработанные Delphi exceptions, фильтруют fake RTL codes и сохраняют цепочку original handlers.
Исправления
mormot.core.os
b6de95bf+56-40
core: refined Delphi exception logging
Влияние
Delphi exceptions логируются один раз при сохранении RTL и third-party hooks. Routing Windows/POSIX стал согласованнее.
Рекомендуется обновиться
Обновитесь при включённом TSynLog interception и сравните single-thread/multi-thread exception counts.
Модули
10
Средний
Исключения Delphi Win32 больше не логируются дважды
Delphi 2009+ Win32 устанавливает RaiseExceptObjProc для language exceptions, а RTLUnwindProc пропускает уже обработанные cRtlException records.
Исправления
mormot.core.os
0a512f58+51-23
core: fixed duplicate Exception logging on Delphi Win32
Влияние
TSynLog больше не пишет дубли для обычных Delphi Win32 exceptions; старые Delphi и FPC сохраняют свои hooks.
Рекомендуется обновиться
Сравните Win32 exception log counts до и после обновления, если alerts ожидают одну запись на exception.
Модули
11
Средний
Exception logs допускают неизвестный instruction address
SynLogException не выводит поле 'at', если TSynLogExceptionContext.EAddr равен нулю, и использует безопасные writer calls перед доступными stack frames.
Исправления
mormot.core.log
128e7134+11-6
core: fixed SynLogException() with Ctxt.EAddr = 0
Влияние
Delphi LLVM exception records без надёжного адреса остаются корректными и сохраняют доступный stack trace.
Модули
12
Средний
Default RSA generation timeout масштабируется с размером ключа
TRsa.Generate умножает RSA_DEFAULT_GENERATION_TIMEOUTMS на 4 для 3072-bit, на 16 для 4096-bit и на 64 для 7680/8192-bit keys, сохраняя explicit custom timeouts.
Исправления
mormot.crypt.rsa
ad2f17e3+10-3
crypt: RSA generation timeout auto adaptation
Влияние
Слабые CPU реже возвращают rgrTimeout при generation больших RSA keys с defaults. Явный TimeOutMS не меняется.
Стоит взглянуть
Проверьте latency budgets для 3072-bit+ generation; задайте TimeOutMS явно, если более долгий default не подходит.
Публичный API
TRsa.Generatebehaviour-changed
Модули
13
Средний
TTunnelLocal отмечает closure до пробуждения handshake waiters
TTunnelLocal.ClosePort и remote-close path ставят fClosed до сигнала fHandshakeEvent, чтобы WaitForHandshake не увидел прежнее open state.
Исправления
mormot.net.tunnel
e7c2a1fb+6-6
net: hardened TTunnelLocal.ClosePort
Влияние
Handshake waiters получают согласованный closed state. Следующий commit переносит assignment внутрь send lock для полной синхронизации.
Модули
14
Средний
Async connection owners могут получать snapshot живых handles или instances
TAsyncConnections добавляет public methods GetConnectionHandles/GetConnectionInstances, копирующие незакрытые соединения под ConnectionLock.ReadOnlyLock.
Новые возможности
mormot.net.async
40766691+61-2
net: new TAsyncConnections.GetConnectionInstances/GetConnectionHandles methods
Влияние
Custom async code получает более безопасные snapshot APIs. Instances защищены от recycling только на KeepConnectionInstanceMS и не подходят для blocking work.
Стоит взглянуть
Для delayed/blocking work используйте handles; instance snapshots — только для немедленных non-blocking операций.
Публичный API
TAsyncConnections.GetConnectionHandlesaddedTAsyncConnections.GetConnectionInstancesadded
Модули
15
Средний
AVX-512 detection проверяет управляемое OS состояние ZMM
mormot.core.base добавляет asm IsZmmOSEnabled, AVX-512 feature-set constants, фильтрацию IntelAvx512 через XCR0 и cpuAVX512 в TX64CpuFeatures для x86-64-v4.
Новые возможности
mormot.core.base+1
6941a143+56-2
core: introducing IntelAvx512 to detect AVX-512 support enabled by the OS
Влияние
CPU dispatch может не использовать AVX-512, если CPUID его сообщает, но старый OS/VM не сохраняет opmask/ZMM, предотвращая #UD faults.
Стоит взглянуть
Перед custom EVEX dispatch используйте IntelAvx512 или cpuAVX512 вместо raw CpuFeatures, особенно в VM.
Публичный API
CPUAVX512FEATURESaddedCPUAVX512X64V4addedIntelAvx512addedcpuAVX512added
16
Средний
OpenSSL wrapper предоставляет TLS 1.3 key update
mormot.lib.openssl11 добавляет SSL_KEY_UPDATE_NOT_REQUESTED, SSL_KEY_UPDATE_REQUESTED и optional SSL_key_update в dynamic/static bindings.
Новые возможности
mormot.lib.openssl11
8f4fd5a1+28-14
lib: new SSL_key_update() OpenSSL function wrapper
Влияние
Низкоуровневые OpenSSL users могут запросить TLS 1.3 traffic-key rotation. Старые библиотеки продолжают загружаться, поскольку symbol optional.
Публичный API
SSL_key_updateaddedSSL_KEY_UPDATE_NOT_REQUESTEDaddedSSL_KEY_UPDATE_REQUESTEDadded
Модули
17
Средний
Delphi POSIX получил предварительное автоматическое логирование исключений
mormot.defines.inc включает interception на Delphi POSIX, а mormot.core.os.posix выбирает RaiseExceptObjProc вместо FPC RaiseProc hook.
Новые возможности
mormot.core.os+1
e2798199+11-6
core: preliminary exception logging on Delphi POSIX
Влияние
Delphi Linux и mobile POSIX builds могут автоматически писать TSynLog exception records там, где interceptor отсутствовал. FPC не меняется.
Стоит взглянуть
Перед production проверьте объём logs и формат exception stack на каждом Delphi POSIX target.
Публичный API
RawExceptionInterceptbehaviour-changed
Модули
18
Низкий
Доступность AVX-512 вычисляется один раз при startup CPU detection
Public no-argument функция IntelAvx512 стала global TIntelCpuFeatures, заполняемым TestCpuFeatures, что убирает повторные XGETBV при сохранении XCR0 filter.
Производительность
mormot.core.base
fb734823+14-18
core: IntelAvx512 is now a global variable pre-computed at startup
Влияние
Feature check стал чтением variable. Обычные Pascal expressions остаются естественными, но код, берущий адрес функции, должен измениться.
Стоит взглянуть
Ищите только low-level code, сохраняющий или передающий function pointer IntelAvx512; обычные value checks не требуют migration.
Публичный API
IntelAvx512signature-changed — Функция этого же выпуска финализирована как precomputed global variable.
Модули
19
Низкий
Delphi exception interception включается по реальной доступности RTL
POSIX include задаёт WITH_RAISEEXCEPTOBJPROC только при HASRAISEEXCEPTOBJPROC; остальные изменения уточняют stack filtering и comments.
Компилятор и платформы
mormot.core.log+3
3327833c+17-15
core: some minor fixes
Влияние
Старые Delphi targets не компилируются с недоступным interception hook. Поведение FPC и modern Delphi не меняется.
20
Низкий
mTLS tests передают большие request bodies через множество TLS records
test.net.proto добавляет large POST route, chunked client sends, CRC32C verification и TLS 1.2/1.3 cases для SChannel/OpenSSL servers.
Тесты
test.net.proto
9a5d0e77+105-28
test: cover huge content with mTLS
Влияние
Regression coverage охватывает границы records и большие mTLS payloads; application API не меняется.
Модули
21
Низкий
Regression test с reset peer воспроизводит WebSocket broadcast deadlock
TNetworkProtocols добавляет server, broadcast worker и 50 short-lived clients, закрывающихся с unread frames и RST; невозможность принять следующий client выявляет wedged server.
Тесты
test.net.proto
c0f6defb+83-0
test: new TNetworkProtocols._TWebSocketAsyncServer regression test
Влияние
Тест покрывает issue #629 без изменения production behavior.
Модули
22
Низкий
mTLS test workers надёжно ловят и классифицируют network exceptions
SChannel/OpenSSL test runner оборачивает worker execution, логирует класс exception, принимает ENetSock как ожидаемый network failure и задаёт каждому async server отдельное имя.
Тесты
mormot.core.log+1
cc95a9eb+28-14
test: hardened error catching for SChannel/OpenSSL mTLS
Влияние
TLS regression failures легче диагностировать без изменения application runtime behavior.
23
Низкий
WebSocket deadlock regression включён в multithread suite
Regression issue #629 перенесена в SlowTests, использует TLoggedThread и запускается с другими background network tests при /multithread.
Тесты
test.net.proto
bb3be0ae+23-16
tests: fixed #629 coverage
Влияние
Меняются только test scheduling и diagnostics; production code не затронут.
Модули
24
Низкий
WebSocket broadcast stress test запускается после первого клиента
Regression thread стартует после первого успешного client connection, чередует send с 0 и 50 ms, хранит локальный счётчик и не разыменовывает его при wedged shutdown.
Тесты
test.net.proto
9a417d31+21-15
test: fixed WS broadcast thread synchronization
Влияние
Меняется только regression harness; production code и API Delphi/FPC не затронуты.
Модули
25
Низкий
Broadcast regression чередует blocking и non-blocking send
WebSocket regression test выносит sent counter из worker и чередует aTimeOut 0/50 ms при повторных connect/reset clients.
Тесты
test.net.proto
0eadadb7+22-7
test: enhanced WS broadcast process
Влияние
Coverage проверяет оба connection-snapshot path WebSocketBroadcast; application behavior не меняется.
Модули
26
Низкий
Windows http.sys WebSocket regression test временно отключён
TNetworkProtocols._HttpApiWebSocketServer теперь сразу выходит, отключая покрытие issue #418 из-за нестабильности теста, особенно на Windows 11.
Тесты
test.net.proto
05e40cd6+3-2
tests: disable issue #418 coverage
Влияние
Application behavior не меняется, но CI больше не обнаруживает regressions в этом Windows http.sys WebSocket scenario.
Модули
27
Низкий
Комментарии LDAP и WebSocket уточнены без runtime changes
Исправлены комментарии около CldapBroadcast, AVX-512 globals и сортировки WebSocket IDs; executable statements не меняются.
Документация
mormot.core.base+2
d3366efd+6-6
net: minor fixes
Влияние
Нет влияния на Delphi/FPC application code или runtime behavior.