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

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.

Сборка2.4.16943 → 2.4.17002
Коммиты59
Строки+7434 -629
Чтение8 мин

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.

Модули

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

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.

Модули

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

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.

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

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 не меняются.

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

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.

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

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. Пользователи промежуточного имени должны его заменить.

Публичный API

  • TNetSocketWrap.GetSocketErrorrenamed — Переименован в GetRawSocketError.

Модули

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

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 не затронут.

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

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.

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

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 значений.

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

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.

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

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.

Модули

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

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 входа.

Модули

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

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.

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

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; такие ресурсы остаются неподдерживаемыми.

Модули

Stefan Diestelmann · 08:30 UTC · открыть коммит на GitHub →

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 не меняется.

Stefan Diestelmann · 08:34 UTC · открыть коммит на GitHub →

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.

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

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 из правильных полей вместо повреждённого или перепутанного текста.

Stefan Diestelmann · 08:31 UTC · открыть коммит на GitHub →

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 пока не охвачены.

Stefan Diestelmann · 08:42 UTC · открыть коммит на GitHub →

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.

Stefan Diestelmann · 08:36 UTC · открыть коммит на GitHub →

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.

Sven Harazim · 16:38 UTC · PR #344 · открыть коммит на GitHub →

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.

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

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 не меняются.

Модули

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

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.

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

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

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.

Модули

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

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.

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

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 не меняются.

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

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 не меняются.

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

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 не меняются.

Модули

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

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 на результате.

Модули

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

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 не меняются.

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

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 приложений не меняются.

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

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.

Sven Harazim · 15:54 UTC · открыть коммит на GitHub →

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 сохраняют историческое поведение.

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

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

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 уведомлениями.

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

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.

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

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.

Модули

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

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.

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

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.

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

Модули

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

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.

Модули

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

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 не меняются.

Stefan Diestelmann · 08:34 UTC · открыть коммит на GitHub →

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.

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

Sven Harazim · 10:10 UTC · открыть коммит на GitHub →

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.

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

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 не затронуты.

Sven Harazim · 19:40 UTC · открыть коммит на GitHub →

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.

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

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.

Модули

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

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.

Модули

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

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.

Модули

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

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.

Модули

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

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.

Модули

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

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.

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

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 не меняются.

Arnaud Bouchez · 13:02 UTC · открыть коммит на 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