Требует действийможет затронуть работающую системуИсходный payload содержит восемь merge commits и 51 non-merge commit; ниже покрыт каждый. Маркеров superseded_by и deprecation notice нет. Два исключаемых окна выведены из явных последующих исправлений в build sequence.
POSIX sockets переживают signals, а TSynLog меняет format ABI
Это крупная cross-platform серия. POSIX socket waits, accept и I/O теперь повторяют EINTR без продления deadlines, а Delphi AArch64 получает interface dispatch, late-bound variants и правильно выровненный time cache. TSynLog намеренно меняет formatted API с PUtf8Char на RawUtf8 и добавляет pre-rendering вне lock; берите финальные fixes, поскольку build 2.4.16999 может выйти за 4KB stack buffer.
Коротко
- Переходите на build 2.4.17002 в 4ef9dc663bbf00ad1920c83a7274e3676610b37f.
- Не развёртывайте build 2.4.16999: formatted log около 4KB с instance prefix может выйти за TSynLog stack buffer.
- Переведите format parameters TSynLogProc, Log, DoLog, Enter, EnterLocal и ManualEnter с PUtf8Char на const RawUtf8.
- POSIX socket I/O, poll, epoll и accept теперь повторяют EINTR с сохранением finite deadlines; используйте завершённую серию, а не промежуточные builds 2.4.16947–2.4.16964.
- Delphi AArch64 получает DispInvoke и interface calls на Android/iOS, а alignment lock GlobalTime исправлен.
- Delphi POSIX исправляет startup hang ordinal resources и перепутанный decode short/long resourcestring.
Рекомендации по обновлению
Переходите на build 2.4.17002. Не останавливайтесь на builds 2.4.16947–2.4.16964, где POSIX EINTR, timeout и async-connect work неоднократно дополняется или исправляется; 2.4.16954 отдельно ломает timeout reporting. Никогда не развёртывайте 2.4.16999: formatted TSynLog line с instance prefix может выйти за 4KB stack buffer; 2.4.17000 это исправляет. Переведите formatted logging callbacks и wrappers на RawUtf8, пересоберите все Delphi/FPC targets, затем проверьте finite socket waits под signals, failed connects, строки около 4KB, Delphi POSIX resources и AArch64 interface calls.
51 из 51 записей · 59 коммитов в апстриме
1
Критический
Log pre-render buffer больше не переполняется
TSynLogFamily.PreRenderFmt вычитает prefix instance из доступных 4KB, а Unicode Log overload теперь передаёт required stack buffer.
Исправления
mormot.core.log
99d189cc+7-4
core: fixed TSynLog latest commits
Влияние
Build 2.4.16999 мог писать за stack buffer для formatted line около 4KB с instance prefix. Build 2.4.17000 устраняет memory corruption risk и восстанавливает Unicode compilation.
Рекомендуется обновиться
Не развёртывайте build 2.4.16999. Используйте 2.4.17000 или новее и проверьте formatted lines около 4KB с non-nil Instance.
Модули
2
Высокий
Formatted overloads TSynLog.Enter также переходят на RawUtf8
Formatted overloads Enter, EnterLocal и ManualEnter меняют PUtf8Char на const RawUtf8 и используют общий 4KB pre-rendering до захвата log lock.
Несовместимые изменения
mormot.core.log
5b05ee28+46-29
core: BREAKING CHANGE TSynLog.Enter Format is RawUtf8
Влияние
Приложения с typed PUtf8Char trace wrappers или overload variables перестанут компилироваться; обычные RawUtf8 и literal calls остаются прямыми.
Требуется миграция
Найдите formatted wrappers Enter, EnterLocal и ManualEnter с PUtf8Char и замените format values на RawUtf8.
Публичный API
TSynLog.Enter / EnterLocalsignature-changed — Formatted overloads принимают const RawUtf8.TSynLog.ManualEntersignature-changed — Formatted overload принимает const RawUtf8.
Модули
3
Высокий
Formatted APIs TSynLog теперь принимают RawUtf8
TSynLogProc, TSynLog.Log, TSynLog.DoLog и internal formatter меняют format parameter с PUtf8Char на const RawUtf8.
Несовместимые изменения
mormot.core.base+1
1bde88e2+13-13
core: BREAKING CHANGE TSynLog Format text is now RawUtf8
Влияние
String literals обычно совместимы, но callback declarations, method variables и вызовы с PUtf8Char больше не совпадают и должны перейти на RawUtf8.
Требуется миграция
Найдите TSynLogProc и logging callbacks с PUtf8Char format; замените на const RawUtf8 и преобразуйте pointer-only calls.
Публичный API
TSynLogProcsignature-changed — Format parameter теперь const RawUtf8.TSynLog.Log / TSynLog.DoLogsignature-changed — Formatted overloads теперь принимают const RawUtf8.
4
Высокий
POSIX stream и datagram I/O последовательно повторяет EINTR
TNetSocketWrap Send, Recv, SendTo и RecvFrom перенесены в platform includes; POSIX повторяет interrupted syscalls, Windows сохраняет прямые WinSock calls.
Исправления
mormot.net.sock+2
7e5228a5+159-87
net: fixed POSIX signals interception for Send/Recv/SendTo/RecvFrom
Влияние
Socket traffic Linux/BSD реже получает ложные сбои при сигналах для TCP и UDP. Windows и публичные signatures не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
5
Высокий
MSG_NOSIGNAL constants исправлены для POSIX systems
mormot.net.sock.posix исправляет MSG_NOSIGNAL для Darwin, FreeBSD, NetBSD, DragonFlyBSD, OpenBSD и Solaris, сохраняя Linux/Android.
Исправления
mormot.net.sock.posix
e8264e1b+21-23
net: fixed cross-platform MSG_NOSIGNAL definitions
Влияние
Socket sends на затронутых BSD/Solaris targets теперь запрашивают правильный no-SIGPIPE вместо неверного flag.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
6
Высокий
Non-blocking connect возвращает реальную completion error
TNetAddr.SocketConnect заменяет 50ms polling loop на WaitFor с SO_ERROR, обрабатывает pending async connect и переименовывает GetSocketError в GetRawSocketError.
Исправления
mormot.net.sock
04130d2b+15-22
net: fixed TNetAddr.SocketConnect error handling
Влияние
Failed TCP connects больше не принимаются за writable success, а async callers получают nrOk при pending completion. Пользователи промежуточного имени должны его заменить.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Публичный API
TNetSocketWrap.GetSocketErrorrenamed — Переименован в GetRawSocketError.
Модули
7
Высокий
Socket waits сохраняют deadline при POSIX signals
PollNoEintr оборачивает poll, повторяет EINTR и пересчитывает оставшийся timeout; TNetSocketWrap.WaitFor использует его вместо трактовки EINTR как timeout.
Исправления
mormot.net.sock.posix
989e6d5b+28-4
net: fixed POSIX EINTR for TNetSocketWrap.WaitFor
Влияние
POSIX clients и servers больше не завершают wait преждевременно и не растягивают конечный timeout при signal. Windows не затронут.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
8
Высокий
accept и accept4 восстанавливаются после interruption
POSIX helper doaccept повторяет accept4/accept при EINTR, сохраняет non-blocking descriptors и помечает accept4 unsupported только для ENOSYS/EOPNOTSUPP.
Исправления
mormot.net.sock.posix
109cf3c5+19-13
net: fixed accept/accept4 POSIX signals support
Влияние
Доставка signal больше не вызывает transient accept failure в POSIX listener loop, а старые kernels корректно переходят на accept.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
9
Высокий
BSD socket constants соответствуют native headers
POSIX definitions исправляют NI_NUMERIC*, poll write flags, FreeBSD TCP keepalive, Darwin-only cellular interface и ARPOP_InREPLY.
Исправления
mormot.net.sock.posix
6949ac17+21-11
net: fixed POSIX cross-platform constants for various BSD flavors
Влияние
Networking FreeBSD, NetBSD, DragonFlyBSD, OpenBSD, Darwin и Solaris использует правильные native option numbers вместо Linux-biased значений.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
10
Высокий
Старые kernels надёжно переходят с accept4 на accept
doaccept один раз сохраняет errno, выходит при fatal accept4 error и переходит к accept после ENOSYS/EOPNOTSUPP; POSIX I/O напрямую проверяет cerrno.
Исправления
mormot.net.sock.posix
29c8bebb+14-11
net: fixed POSIX accept4 -> accept fallback
Влияние
Linux без usable accept4 больше не застревает на unsupported path и не пропускает fallback listener call.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
11
Высокий
SocketConnect меняет режим только после успешного ожидания
TNetAddr.SocketConnect сохраняет async mode во время WaitForWithRawSocketError, отображает nrRetry в nrTimeout и вызывает MakeBlocking только после успешного sync connect.
Исправления
mormot.net.sock
1d878f7f+9-14
net: fixed TNetAddr.SocketConnect
Влияние
Completion соединения POSIX/Windows проверяется без преждевременного перехода в blocking mode, предотвращая hangs и сохраняя requested mode.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
12
Высокий
Сбойные пути входа TSynLog сохраняют timing и scope
TSynLog инициализирует timing в конструкторе, передаёт MicroSecs через LogEnterFmt и возвращает nil из EnterLocal при сбое LockAndPrepareEnter.
Исправления
mormot.core.log
e4c69cc1+12-9
core: some TSynLog.Enter fixes on error
Влияние
Сбой запуска или ротации больше не оставляет ложный успешный logging scope, а указатели manual timing получают правильный timestamp входа.
Рекомендуется обновиться
Обновите сервисы с EnterLocal или ManualEnter при инициализации logger и проверьте сбой создания файла.
Модули
13
Высокий
Immediate TCP connect восстанавливает blocking mode
При немедленном успехе non-blocking connect TNetAddr.SocketConnect вызывает MakeBlocking для ms >= 0, оставляя ms=-1 асинхронным.
Исправления
mormot.net.sock+1
496af189+9-4
net: fixed TNetAddr.SocketConnect immediate connection
Влияние
Синхронные клиенты Delphi/FPC больше не получают неожиданно non-blocking socket на fast local-connect path.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
14
Высокий
Integer resource names больше не зависают при запуске Delphi POSIX
TExecutableResource.Open и ResourceExists в Delphi POSIX отклоняют MAKEINTRESOURCE pointers ниже $10000 до того, как RTL преобразует их в строки.
Исправления
mormot.core.os
a21c2edb+8-0
core: fixed startup hang of Delphi POSIX apps using integer resource names
Влияние
Приложения Delphi Linux, macOS, Android и iOS избегают GPF/stack-overflow loop при запуске с ordinal resources; такие ресурсы остаются неподдерживаемыми.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
15
Высокий
Блокировки GlobalTime выровнены на Delphi AArch64
Record cache GlobalTime больше не packed, что обеспечивает pointer alignment для TRWLightLock; последующие assertions допускают padding compiler.
Исправления
mormot.core.datetime
b8eaea86+6-1
core: fixed unaligned GlobalTime[] breaking its lock on Delphi aarch64
Влияние
Приложения Delphi AArch64, особенно iOS, избегают access violation атомарной блокировки на нечётном адресе. Семантика cache для других compilers не меняется.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
16
Высокий
Исправлена regression timeout socket wait
PollNoEintr восстанавливает result := 0 при истечении deadline, а TNetSocketWrap.WaitFor выходит до чтения stale revents после timeout.
Исправления
mormot.net.sock.posix
8187f47f+5-2
net: fixed TNetSocketWrap.WaitFor timeout regression
Влияние
POSIX waits снова сообщают чистый timeout вместо интерпретации stale poll state. Исправление обязательно для предыдущего EINTR timeout refactor.
Рекомендуется обновиться
Используйте build 2.4.16955 или новее, но не 2.4.16954, и повторите finite-timeout network tests под signals.
Модули
17
Высокий
Resourcestring Delphi POSIX используют правильный layout
LoadResString проверяет ShortLen <> $ffff для short layout; $ffff теперь правильно выбирает long resourcestring record Delphi RTL.
Исправления
mormot.core.os.delphi
2b55dc23+1-1
core: fixed swapped short/long resourcestring layout on Delphi POSIX
Влияние
Приложения Delphi POSIX теперь загружают short и long localized resource strings из правильных полей вместо повреждённого или перепутанного текста.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
18
Высокий
Delphi Android и iOS получают статические AArch64 interface stubs
mormot.core.interfaces связывает внешние AArch64 call/fake-VMT stubs, передаёт hidden by-reference result через X8 и использует static thunks там, где iOS запрещает generated executable pages.
Новые возможности
mormot.core.interfaces+1
0d9880b7+319-2
interfaces: external aarch64 stubs for the Delphi Android and iOS compilers
Влияние
Interface-based services и fake interface dispatch становятся доступны на Delphi Android/iOS AArch64, включая code-signed iOS. macOS и Windows ARM64 пока не охвачены.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
19
Высокий
DispInvoke понимает varargs Delphi AArch64
mormot.core.variants добавляет readers va_list для AAPCS64 и Apple AArch64, чтобы DispInvokeNamed получал GP, floating-point и by-reference arguments по ABI платформы.
Новые возможности
mormot.core.variants+1
ea847060+90-13
variants: implemented DispInvoke late-binding on Delphi aarch64
Влияние
Late-bound variant method calls теперь работают на Delphi Android, Linux, iOS и macOS AArch64 вместо несовместимого flat-buffer или x86-64 layout.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
20
Средний
Remote LogView нормализует layout каждого клиента
TRemoteLogNormalizer переписывает calendar, zoned, high-resolution и text rows в единый timestamp/thread/level layout и назначает уникальные thread numbers для каждого HTTP-соединения.
Исправления
mormot.tools.logview+1
6a02c38a+500-40
tools: LogView remote logging with any client layout - fix #344
Влияние
Live logs клиентов с разными layouts TSynLog теперь видны и фильтруются. Изменение ограничено LogView и его remote-capture path.
21
Средний
Socket availability явно обрабатывает POSIX signals
TNetSocketWrap.Available получает отдельные POSIX и Windows implementations; POSIX MSG_PEEK повторяет EINTR и сохраняет raw errno.
Исправления
mormot.net.sock+2
b0bbdf13+94-59
net: fixed TNetSocketWrap.Available on POSIX
Влияние
Connection checks больше не считают interrupted POSIX peek закрытым socket. Поведение Windows сохранено в platform implementation.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
22
Средний
UDP send и receive повторяются после EINTR в POSIX
TNetSocketWrap.SendTo и RecvFrom повторяют sendto и recvfrom в POSIX при errno=EINTR, сохраняя поведение Windows.
Исправления
mormot.net.sock
389ef677+27-8
net: fixed EINTR on TNetSocketWrap.SendTo/RecvFrom
Влияние
Linux- и BSD-сервисы с частыми сигналами больше не получают transient UDP failure только из-за прерванного syscall. Публичные signatures не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
23
Средний
epoll control повторяет EINTR, timeout loops уточнены
EpollCtlNoEIntr оборачивает epoll_ctl для subscribe/unsubscribe, а poll/epoll retry loops останавливаются при нулевом пересчитанном timeout.
Исправления
mormot.net.sock.posix
99bc19a1+15-17
net: fixed EINTR in TPollSocketEpoll and poll/epoll timeouts
Влияние
Linux subscriptions устойчивы к signal interruption, но этот промежуточный build пропустил сброс timeout result, восстановленный следующим commit; не оставайтесь на 2.4.16954.
Стоит взглянуть
Модули
24
Средний
Reachability checks используют проверенные async connects
GetReachableNetAddr использует SocketConnect(-1), WaitForWithRawSocketError и MakeBlocking, закрывает failed sockets и останавливается без candidates.
Исправления
mormot.net.sock
a74fa349+22-10
net: rewritten GetReachableNetAddr() function
Влияние
Address probing больше не считает writable socket с pending SO_ERROR reachable, улучшая выбор endpoint в клиентах Delphi/FPC.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
25
Средний
AArch64 alignment и Tunnel cleanup получают follow-up fixes
Assertions GlobalTime допускают padding, comments ресурсов уточнены, а TTunnelLocal.OpenInternal инициализирует thread до exception logging и последовательно сообщает socket.
Исправления
mormot.core.datetime+2
ce3a81b8+11-17
core: some fixes after previous commits
Влияние
Это убирает startup assertion risk на Delphi AArch64 и undefined diagnostics при сбое Tunnel до создания thread.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
26
Средний
epoll waits также сохраняют timeout после EINTR
EpollWaitNoEintr повторяет epoll_wait после EINTR и вычитает elapsed time перед продолжением TPollSocketEpoll.WaitForModified.
Исправления
mormot.net.sock.posix
9c8515b0+24-3
net: fixed EINTR support on TPollSocketEpoll.WaitForModified
Влияние
Linux epoll servers соблюдают requested deadlines и не выдают signal interruption как отсутствие events. Публичные API не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
27
Средний
Remote MAC discovery переживает interrupted ARP sends
GetRemoteMacAddress повторяет raw ARP sendto при EINTR, а helpers poll/epoll явно инициализируют deadline variables.
Исправления
mormot.net.sock.posix
3af914ac+14-12
net: fixed EINTR support on GetRemoteMacAddress()
Влияние
Linux ARP-based MAC lookup больше не теряется из-за signal interruption. Другие платформы и публичные API не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
28
Средний
Tunnel failures сохраняют socket context
TTunnelLocalThread включает raw accept error в exception, а TTunnelLocal.OpenInternal логирует class, message, thread и socket до cleanup.
Исправления
mormot.net.tunnel
93ac7a4a+13-7
net: enhanced Tunnel error handling
Влияние
Tunnel connection failures становятся диагностируемыми и по-прежнему закрывают partial socket. Протокол и публичные signatures не меняются.
Модули
29
Средний
Абсолютный XML lookup намеренно перемещает parser
TXmlParser.GetU возвращает false для nil, сохраняет position для relative и // paths, но absolute / path делает rewind и остаётся на найденной позиции; GetI наследует поведение.
Исправления
mormot.core.fmt
9dc38579+15-5
core: refined TXmlParser.GetU/GetI process
Влияние
Код, ожидавший restore позиции после GetU('/...') или GetI('/...'), теперь увидит изменённый cursor и должен проверить последовательность.
Стоит взглянуть
Найдите GetU/GetI с absolute path и используйте Save/Restore, если прежняя position должна сохраниться.
Публичный API
TXmlParser.GetU / GetIbehaviour-changed — Absolute paths теперь оставляют parser на результате.
Модули
30
Средний
Перехват SIGPIPE использует SIG_IGN и сохраняет успех
SigPipeIntercept устанавливает SIG_IGN вместо пустого handler и ставит process flag только после успеха fpSigaction.
Исправления
mormot.core.os.posix
ec6e317b+5-5
core: SigPipeIntercept() cleanup
Влияние
POSIX processes получают стандартное подавление SIGPIPE и могут повторить инициализацию после failed sigaction. Публичные API не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
31
Средний
Наборы sockets на poll игнорируют EINTR без потери времени
TPollSocketPoll.WaitForModified и WaitForSeveral теперь вызывают PollNoEintr, сохраняя конечный timeout через signal interruptions.
Исправления
mormot.net.sock.posix
e637b45f+4-4
net: fixed TPollSocketPoll.WaitForModified / WaitForSeveral EINTR support
Влияние
POSIX poll backends больше не возвращают пустой или ошибочный набор только из-за сигнала. API приложений не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
32
Средний
LogView возвращается как desktop-инструмент Lazarus
Новое LCL-приложение mormot.tools.logview открывает, фильтрует, ищет и профилирует TSynLog, SynLZ и обычные текстовые файлы, с DPI-aware layout и очередью remote rows.
Новые возможности
mormot.tools.logview
307a9fb7+2162-0
tools: port the mORMot 1 LogView sample as a FPC/Lazarus LCL app
Влияние
Backends framework не меняются; пользователи FPC/Lazarus получают поддерживаемый viewer с безопасной обработкой live remote logs в UI thread.
Модули
33
Средний
OpenSSL 4 подавляет SIGPIPE для каждого socket
SSLSetFdNoSigPipe использует BIO_C_SET_SEND_FLAGS с NET_MSG_NOSIGNAL на OpenSSL 4+, сохраняя process-wide SigPipeIntercept для OpenSSL 1.1/3.x.
Новые возможности
mormot.core.os+2
a413d047+67-20
lib: use new OpenSSL 4+ BIO_C_SET_SEND_FLAGS for MSG_NOSIGNAL
Влияние
POSIX-приложения с OpenSSL 4 больше не меняют SIGPIPE handling всего процесса. Старые OpenSSL сохраняют историческое поведение.
Стоит взглянуть
34
Средний
Callbacks удалённого лога могут определить отправителя
TRestHttpRemoteLogServer добавляет CreateWithSender и TRemoteLogReceivedFrom с ID соединения и remote IP; callbacks назначаются до запуска HTTP server.
Новые возможности
mormot.rest.http.server
e29490aa+30-7
rest: TRestHttpRemoteLogServer.CreateWithSender
Влияние
Существующий Create сохраняет callback. Новые viewers Delphi/FPC могут разделять одновременных отправителей, а стартовые запросы больше не попадают в race с неназначенным callback.
Публичный API
TRemoteLogReceivedFromadded — Callback с ID соединения и remote IP.TRestHttpRemoteLogServer.CreateWithSenderadded — Создаёт remote-log server с sender-aware уведомлениями.
Модули
35
Средний
Sockets предоставляют pending SO_ERROR
TNetSocketWrap добавляет GetSocketError, читает SOL_SOCKET/SO_ERROR и отображает raw system value в TNetResult; Delphi POSIX также экспортирует SO_ERROR.
Новые возможности
mormot.core.os.delphi+1
a299fb59+22-2
net: new TNetSocketWrap.GetSocketError method
Влияние
Low-level код Delphi/FPC может правильно проверять async connect completion, но промежуточное имя в следующем изменении станет GetRawSocketError.
Публичный API
TNetSocketWrap.GetSocketErroradded — Промежуточное имя; сразу переименовано в GetRawSocketError.
36
Средний
Helper объединяет connect wait и SO_ERROR
TNetSocketWrap.WaitForWithRawSocketError ждёт write/error events и затем возвращает GetRawSocketError, используя nrRetry для пустого набора.
Новые возможности
mormot.net.sock
07c8080b+16-2
net: new TNetSocketWrap.WaitForWithRawSocketError method
Влияние
Пользовательский async connection code Delphi/FPC может применять ту же правильную completion check, что SocketConnect. Существующие вызовы не затронуты.
Публичный API
TNetSocketWrap.WaitForWithRawSocketErroradded — Ждёт completion socket и читает SO_ERROR.
Модули
37
Средний
Accept может вернуть raw socket error
TNetSocketWrap.Accept добавляет optional rawError output через NetLastError, сохраняя трёхаргументные вызовы благодаря default nil.
Новые возможности
mormot.core.os.posix+1
e8de6bf7+7-9
net: enhanced TNetSocketWrap.Accept()
Влияние
Servers могут логировать точный errno ошибки accept без поломки существующих Delphi/FPC source calls.
Публичный API
TNetSocketWrap.Acceptsignature-changed — Добавлен optional rawError: PNetErrorInt = nil.
38
Средний
Instance text предварительно вычисляется с log line
TSynLogFamily.PreRenderFmt теперь пишет prefix class/pointer instance в тот же stack buffer до writer lock, затем форматирует сообщение.
Производительность
mormot.core.log
a6bb53dc+31-21
core: pre-compute the TSynLog instance pointer text if possible
Влияние
Instance-heavy multithreaded logging ещё сокращает lock duration, но промежуточная реализация неверно считает remaining buffer и исправлена в build 2.4.17000.
Стоит взглянуть
Модули
39
Средний
Formatted log text рендерится до блокировки
TSynLog pre-renders до 4KB в stack buffer вне writer lock, убирает control bytes и добавляет TSynLogFamily.DirectRendering для возврата к in-lock rendering.
Производительность
mormot.core.log
ab869875+29-4
core: pre-render formatted text up to 4KB on stack outside of the TSynLog lock
Влияние
Multithreaded services меньше держат logger lock. Object/interface arguments используют slow path, а DirectRendering сохраняет ожидания custom writer.
Стоит взглянуть
Проведите benchmark интенсивного logging и включите DirectRendering, если custom writer зависит от formatting под lock.
Публичный API
TSynLogFamily.DirectRenderingadded — Отключает новый 4KB pre-rendering fast path.
Модули
40
Средний
Современный Android находит ICU без libicudata
Android ICU detection пробует libicuuc.so и libicui18n.so при отсутствии libicudata.so, затем разрешает versioned или unversioned symbols.
Компилятор и платформы
mormot.core.os.posix
36796d3c+11-1
core: enhanced ICU detection on modern Android
Влияние
Современные Android с ICU data в APEX снова предоставляют Unicode conversion приложениям Delphi/FPC. Другие POSIX targets не меняются.
Рекомендуется обновиться
Обновитесь до build 2.4.17002 и до развёртывания проверьте исправленный путь на каждой затронутой Delphi/FPC target.
Модули
41
Средний
Remote logging всегда использует portable socket server
TRestHttpRemoteLogServer выбирает useHttpSocket на всех платформах вместо HTTP_DEFAULT_MODE, избегая регистрации Windows http.sys URI и privilege-dependent fallback.
Компилятор и платформы
mormot.rest.http.server
4f487ad9+5-5
rest: TRestHttpRemoteLogServer now uses useHttpSocket on all systems
Влияние
Windows remote-log deployments больше не меняют backend в зависимости от admin rights. Socket server достаточен для небольшого числа clients.
Стоит взглянуть
Модули
42
Низкий
Ошибки accept включают OS error
Async и threaded HTTP server accept loops получают raw errno и добавляют SystemErrorShort в debug logs; banned-address check выполняется только после успеха.
Исправления
mormot.net.async+1
d59aeb92+16-11
net: enhanced accept() logged error content
Влияние
Operators получают полезную диагностику accept без публичного изменения. Failed accept больше не передаёт uninitialized peer address в ban check.
43
Низкий
LogView сохраняет ключевые колонки и размер шрифта
LogView не позволяет text-column скрывать time, level и thread columns и добавляет persistent font sizing через keys, mouse wheel и menu.
Новые возможности
mormot.tools.logview
1c454fb6+148-12
tools: LogView keeps the first columns visible and has a custom font size
Влияние
Меняется только UI Lazarus LogView; backend logging и file formats не затронуты.
Модули
44
Низкий
Управляющие символы можно заменить in-place
mormot.core.unicode добавляет TrimControlCharsBuffer, заменяющий bytes #0..#31 пробелами прямо в UTF-8 buffer.
Новые возможности
mormot.core.unicode
bcf4e877+22-2
core: new TrimControlCharsBuffer() function
Влияние
Существующий код не меняется; Delphi/FPC получает allocation-free helper для нового TSynLog pre-rendering path.
Публичный API
TrimControlCharsBufferadded — Заменяет ASCII control bytes пробелами in-place.
Модули
45
Низкий
Short location lookup может убрать hex fallback
TDebugFile.FindLocationShort добавляет aNoHex, иначе использует PointerToHexShortVar, а также исправляет comments в recent logging code.
Новые возможности
mormot.core.log
add4ed16+13-9
core: some logging fixes and TSynLogFile enhancement
Влияние
Diagnostic callers могут запросить пустой результат без debug symbol вместо одного адреса. Existing two-argument calls сохраняют hex fallback.
Публичный API
TDebugFile.FindLocationShortsignature-changed — Добавлен optional aNoHex: boolean = false.
Модули
46
Низкий
Pointer text можно записать в любой ShortString
mormot.core.text добавляет PointerToHexShortVar, а PointerToHexShort делегирует ему pointer-width hex conversion.
Новые возможности
mormot.core.text
cd8db464+15-6
core: new PointerToHexShortVar() function
Влияние
Существующие вызовы не меняются; allocation-free diagnostic code может напрямую заполнить существующий ShortString.
Публичный API
PointerToHexShortVaradded — Записывает pointer value в предоставленный ShortString.
Модули
47
Низкий
Format arguments можно проверить на object rendering
mormot.core.text добавляет VarRecHasObject для обнаружения vtObject/vtInterface, требующих TTextWriter.WriteObject.
Новые возможности
mormot.core.text
906a763f+18-2
core: new VarRecHasObject() function
Влияние
Helper поддерживает последующую оптимизацию логов и не меняет приложения. Позже в этой серии он переименован в VarRecNeedsWriteObject.
Модули
48
Низкий
Platform MSG_NOSIGNAL становится публичным
mormot.net.sock инициализирует публичную переменную NET_MSG_NOSIGNAL из platform constant для higher-level socket и TLS кода.
Новые возможности
mormot.net.sock
eabe6fba+7-2
net: new NET_MSG_NOSIGNAL global cross-platform constant
Влияние
Существующие приложения не затронуты; low-level integrations могут читать effective flag без дублирования platform conditionals.
Публичный API
NET_MSG_NOSIGNALadded — Runtime-копия platform MSG_NOSIGNAL.
Модули
49
Низкий
Bounded UTF-8 formatting прекращает parsing после заполнения
TFormatUtf8.InitParse получает MaxSize и прекращает сбор format blocks при достижении лимита; FormatBufferRaw и FormatShort передают реальную ёмкость.
Производительность
mormot.core.text
7a04bb59+14-10
core: optimized TFormatUtf8.InitParse when a maximum size is involved
Влияние
Truncated formatting не преобразует ненужные поздние arguments, снижая работу при том же bounded output.
Модули
50
Низкий
Проверка object format получает финальное имя
VarRecHasObject переименован в VarRecNeedsWriteObject с byte-safe проверкой VType; comments TXmlParser описывают cursor для absolute path.
Внутреннее устройство
mormot.core.fmt+1
697af472+10-7
core: some renaming/comment with no functional change
Влияние
Только код на промежуточном имени helper должен его заменить; ранее существующие приложения не требуют migration.
Публичный API
VarRecHasObjectrenamed — Финальное имя — VarRecNeedsWriteObject.
51
Низкий
AArch64 follow-up меняет только стиль и inline
Commit исправляет indentation, помечает AAPCS64 va_list helpers inline и обновляет changelog по Delphi 13.1.
Обслуживание
mormot.core.interfaces+1
dfac0653+7-7
core: minor change after previous PR
Влияние
Функционального влияния на приложения нет; поведение Delphi/FPC и публичные API не меняются.