Act nowcan affect a running systemThe raw payload contains eight merge commits and 51 non-merge commits; every non-merge commit is covered below. It has no superseded_by markers and no deprecation notice. The two avoid windows are derived from explicit later corrections in the embedded build sequence.
POSIX sockets survive signals while TSynLog changes its format ABI
This is a large cross-platform batch. POSIX socket waits, accepts and I/O now retry EINTR without extending deadlines, while Delphi AArch64 gains interface dispatch, late-bound variants and correctly aligned time caches. TSynLog deliberately changes formatted APIs from PUtf8Char to RawUtf8 and adds out-of-lock pre-rendering; take the final fixes because build 2.4.16999 can overrun its 4KB stack buffer.
TL;DR
- Land on build 2.4.17002 at 4ef9dc663bbf00ad1920c83a7274e3676610b37f.
- Do not deploy build 2.4.16999: instance-prefixed formatted logs near 4KB can write past the TSynLog stack buffer.
- Migrate TSynLogProc, formatted Log, DoLog, Enter, EnterLocal and ManualEnter format parameters from PUtf8Char to const RawUtf8.
- POSIX socket I/O, poll, epoll and accept now retry EINTR while preserving finite deadlines; use the completed sequence rather than intermediate builds 2.4.16947–2.4.16964.
- Delphi AArch64 gains DispInvoke and interface-call support on Android and iOS, and GlobalTime lock alignment is repaired.
- Delphi POSIX fixes include ordinal-resource startup hangs and swapped short/long resourcestring decoding.
Upgrade advice
Land on build 2.4.17002. Do not stop in builds 2.4.16947–2.4.16964, where POSIX EINTR, timeout and asynchronous-connect work is repeatedly completed or corrected; build 2.4.16954 specifically regresses timeout reporting. Never deploy build 2.4.16999 because formatted TSynLog lines with an instance prefix can overrun the 4KB stack buffer; 2.4.17000 fixes it. Migrate all formatted logging callbacks and wrappers to RawUtf8, rebuild every Delphi/FPC target, then stress finite socket waits under signals, failed connects, near-4KB log lines, Delphi POSIX resources and AArch64 interface calls.
51 of 51 entries · 59 commits upstream
1
Critical
The log pre-render buffer can no longer overflow
TSynLogFamily.PreRenderFmt subtracts the precomputed instance prefix from the available 4KB capacity, and the Unicode Log overload now supplies its required stack buffer.
Fixes
mormot.core.log
99d189cc+7-4
core: fixed TSynLog latest commits
Impact
Build 2.4.16999 could write past the stack buffer for an instance-prefixed formatted line near 4KB. Build 2.4.17000 removes that memory-corruption risk and restores Unicode compilation.
Upgrade recommended
Do not deploy build 2.4.16999. Land on 2.4.17000 or later and test near-4KB formatted lines with a non-nil Instance.
Units
2
High
Formatted TSynLog.Enter overloads also move to RawUtf8
Formatted Enter, EnterLocal and ManualEnter overloads replace PUtf8Char with const RawUtf8 and share the 4KB pre-rendering path before acquiring the log lock.
Breaking changes
mormot.core.log
5b05ee28+46-29
core: BREAKING CHANGE TSynLog.Enter Format is RawUtf8
Impact
Applications with typed PUtf8Char trace wrappers or matching overload variables will stop compiling; ordinary RawUtf8 and literal calls remain direct.
Migration required
Search formatted Enter, EnterLocal and ManualEnter wrappers for PUtf8Char and change their format values to RawUtf8.
Public API
TSynLog.Enter / EnterLocalsignature-changed — Formatted overloads now take const RawUtf8.TSynLog.ManualEntersignature-changed — Formatted overload now takes const RawUtf8.
Units
3
High
Formatted TSynLog APIs now take RawUtf8
TSynLogProc, TSynLog.Log, TSynLog.DoLog and their internal formatter change the format parameter from PUtf8Char to const RawUtf8.
Breaking changes
mormot.core.base+1
1bde88e2+13-13
core: BREAKING CHANGE TSynLog Format text is now RawUtf8
Impact
String literals usually remain source-compatible, but callback declarations, method variables and callers passing PUtf8Char no longer match and must adopt RawUtf8.
Migration required
Search for TSynLogProc and logging callbacks with PUtf8Char format parameters; change them to const RawUtf8 and convert pointer-only call sites.
Public API
TSynLogProcsignature-changed — Format parameter is const RawUtf8.TSynLog.Log / TSynLog.DoLogsignature-changed — Formatted overloads now accept const RawUtf8.
4
High
POSIX stream and datagram I/O consistently retries EINTR
TNetSocketWrap Send, Recv, SendTo and RecvFrom move into platform includes; POSIX implementations retry interrupted syscalls, while Windows keeps direct WinSock calls.
Fixes
mormot.net.sock+2
7e5228a5+159-87
net: fixed POSIX signals interception for Send/Recv/SendTo/RecvFrom
Impact
Linux and BSD socket traffic is less likely to fail spuriously under signals across TCP and UDP. Windows behavior and public signatures stay unchanged.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
5
High
MSG_NOSIGNAL constants are corrected across POSIX systems
mormot.net.sock.posix corrects MSG_NOSIGNAL values for Darwin, FreeBSD, NetBSD, DragonFlyBSD, OpenBSD and Solaris, while retaining Linux and Android values.
Fixes
mormot.net.sock.posix
e8264e1b+21-23
net: fixed cross-platform MSG_NOSIGNAL definitions
Impact
Socket sends on affected BSD/Solaris targets now request the intended no-SIGPIPE behavior instead of passing a wrong flag value.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
6
High
Non-blocking connect reports the socket's real completion error
TNetAddr.SocketConnect replaces a 50ms polling loop with WaitFor followed by SO_ERROR, handles pending asynchronous connects, and renames GetSocketError to GetRawSocketError.
Fixes
mormot.net.sock
04130d2b+15-22
net: fixed TNetAddr.SocketConnect error handling
Impact
Failed TCP connects are no longer mistaken for writable success, and asynchronous callers get nrOk while completion is pending. Users of the one-commit method name must rename it.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Public API
TNetSocketWrap.GetSocketErrorrenamed — Renamed to GetRawSocketError.
Units
7
High
Socket waits preserve deadlines across POSIX signals
PollNoEintr wraps poll, retries EINTR and recomputes the remaining timeout; TNetSocketWrap.WaitFor uses it instead of treating EINTR as a timeout.
Fixes
mormot.net.sock.posix
989e6d5b+28-4
net: fixed POSIX EINTR for TNetSocketWrap.WaitFor
Impact
POSIX clients and servers no longer return early or extend finite waits indefinitely when signals interrupt poll. Windows is unaffected.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
8
High
accept and accept4 recover from interrupted calls
The POSIX doaccept helper retries accept4 and accept on EINTR, preserves non-blocking descriptors, and records unsupported accept4 only for ENOSYS or EOPNOTSUPP.
Fixes
mormot.net.sock.posix
109cf3c5+19-13
net: fixed accept/accept4 POSIX signals support
Impact
Signal delivery no longer makes POSIX listener loops report transient accept failures, and old kernels still fall back to accept correctly.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
9
High
BSD socket constants match their native headers
POSIX definitions correct NI_NUMERIC*, poll write flags, FreeBSD TCP keepalive values, Darwin-only cellular interface handling and ARPOP_InREPLY.
Fixes
mormot.net.sock.posix
6949ac17+21-11
net: fixed POSIX cross-platform constants for various BSD flavors
Impact
FreeBSD, NetBSD, DragonFlyBSD, OpenBSD, Darwin and Solaris networking uses the intended native option numbers instead of Linux-biased values.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
10
High
Old kernels reliably fall back from accept4
doaccept stores errno once, exits on fatal accept4 errors, and falls through to plain accept after ENOSYS or EOPNOTSUPP; POSIX I/O uses direct cerrno checks.
Fixes
mormot.net.sock.posix
29c8bebb+14-11
net: fixed POSIX accept4 -> accept fallback
Impact
Linux systems without usable accept4 no longer get stuck on the unsupported path or skip the fallback listener call.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
11
High
SocketConnect switches modes only after a successful wait
TNetAddr.SocketConnect now keeps the socket asynchronous during WaitForWithRawSocketError, maps nrRetry to nrTimeout, and calls MakeBlocking only after a successful synchronous connection.
Fixes
mormot.net.sock
1d878f7f+9-14
net: fixed TNetAddr.SocketConnect
Impact
POSIX and Windows connection completion is checked without switching to blocking mode prematurely, avoiding hangs and preserving the caller's requested mode.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
12
High
Failed TSynLog entry paths keep timing and scope consistent
TSynLog initializes timing in its constructor, forwards MicroSecs through LogEnterFmt, and makes EnterLocal return nil when LockAndPrepareEnter fails.
Fixes
mormot.core.log
e4c69cc1+12-9
core: some TSynLog.Enter fixes on error
Impact
Failed startup or rotation no longer leaves callers with a false successful logging scope, and manual timing pointers receive the intended entry timestamp.
Upgrade recommended
Upgrade services that rely on EnterLocal or ManualEnter around logger initialization and test failed file creation.
Units
13
High
Immediate TCP connects restore blocking mode for synchronous callers
When non-blocking connect succeeds immediately, TNetAddr.SocketConnect now calls MakeBlocking for ms >= 0 while leaving ms = -1 callers asynchronous.
Fixes
mormot.net.sock+1
496af189+9-4
net: fixed TNetAddr.SocketConnect immediate connection
Impact
Synchronous Delphi/FPC clients no longer unexpectedly receive a non-blocking socket on the fast local-connect path.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
14
High
Integer resource names no longer hang Delphi POSIX startup
TExecutableResource.Open and ResourceExists reject MAKEINTRESOURCE-style pointers below $10000 on Delphi POSIX before the RTL can cast them to strings.
Fixes
mormot.core.os
a21c2edb+8-0
core: fixed startup hang of Delphi POSIX apps using integer resource names
Impact
Delphi Linux, macOS, Android and iOS applications avoid a startup GPF/stack-overflow loop when code probes ordinal resources; such ordinal resources remain unsupported.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
15
High
GlobalTime locks are aligned on Delphi AArch64
The GlobalTime cache record is no longer packed, ensuring TRWLightLock receives pointer alignment; comments and later assertions allow compiler-added padding.
Fixes
mormot.core.datetime
b8eaea86+6-1
core: fixed unaligned GlobalTime[] breaking its lock on Delphi aarch64
Impact
Delphi AArch64 applications, notably iOS, avoid access violations from atomic lock instructions on an odd address. Other compilers keep the same cache semantics.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
16
High
A socket-wait timeout regression is repaired
PollNoEintr restores result := 0 when its deadline expires, and TNetSocketWrap.WaitFor exits before reading stale revents after a timeout.
Fixes
mormot.net.sock.posix
8187f47f+5-2
net: fixed TNetSocketWrap.WaitFor timeout regression
Impact
POSIX waits again report a clean timeout instead of interpreting stale poll state. This repair is required for the preceding EINTR timeout refactor.
Upgrade recommended
Use build 2.4.16955 or later, never 2.4.16954, and rerun finite-timeout network tests under signals.
17
High
Delphi POSIX resource strings use the correct layout
LoadResString checks ShortLen <> $ffff for the short layout; $ffff now correctly selects the long resourcestring record defined by the Delphi RTL.
Fixes
mormot.core.os.delphi
2b55dc23+1-1
core: fixed swapped short/long resourcestring layout on Delphi POSIX
Impact
Delphi POSIX applications now load short and long localized resource strings from the correct fields instead of returning corrupted or swapped text.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
18
High
Delphi Android and iOS gain static AArch64 interface stubs
mormot.core.interfaces links external AArch64 call/fake-VMT stubs, passes hidden by-reference results through X8, and uses static thunks where iOS forbids generated executable pages.
New features
mormot.core.interfaces+1
0d9880b7+319-2
interfaces: external aarch64 stubs for the Delphi Android and iOS compilers
Impact
Interface-based services and fake interface dispatch become usable on Delphi Android and iOS AArch64, including code-signed iOS processes. macOS and Windows ARM64 remain outside this implementation.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
19
High
DispInvoke understands Delphi AArch64 varargs
mormot.core.variants adds AAPCS64 and Apple AArch64 va_list readers so DispInvokeNamed retrieves general-purpose, floating-point and by-reference arguments with each platform ABI.
New features
mormot.core.variants+1
ea847060+90-13
variants: implemented DispInvoke late-binding on Delphi aarch64
Impact
Late-bound variant method calls now work on Delphi Android, Linux, iOS and macOS AArch64 instead of using an incompatible flat-buffer or x86-64 layout.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
20
Medium
Remote LogView normalizes every client layout
TRemoteLogNormalizer rewrites calendar, zoned, high-resolution and plain rows into one timestamp/thread/level layout and assigns unique thread numbers per HTTP connection.
Fixes
mormot.tools.logview+1
6a02c38a+500-40
tools: LogView remote logging with any client layout - fix #344
Impact
Live logs from clients using different TSynLog layouts are all visible and filterable. The change is confined to the LogView tool and its remote-capture path.
21
Medium
Socket availability handles POSIX signals explicitly
TNetSocketWrap.Available gains separate POSIX and Windows implementations; POSIX MSG_PEEK retries EINTR and preserves the raw errno for the caller.
Fixes
mormot.net.sock+2
b0bbdf13+94-59
net: fixed TNetSocketWrap.Available on POSIX
Impact
Connection checks no longer classify an interrupted POSIX peek as a closed socket. Windows behavior is kept in its platform implementation.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
22
Medium
UDP send and receive retry interrupted POSIX syscalls
TNetSocketWrap.SendTo and RecvFrom now repeat sendto and recvfrom on POSIX when errno is EINTR, while retaining the existing Windows behavior.
Fixes
mormot.net.sock
389ef677+27-8
net: fixed EINTR on TNetSocketWrap.SendTo/RecvFrom
Impact
Signal-heavy Linux and BSD services no longer report transient UDP failures solely because a syscall was interrupted. Public signatures are unchanged.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
23
Medium
epoll control retries EINTR and timeout loops are tightened
EpollCtlNoEIntr wraps epoll_ctl for subscribe/unsubscribe, while poll and epoll retry loops stop once the recomputed timeout reaches zero.
Fixes
mormot.net.sock.posix
99bc19a1+15-17
net: fixed EINTR in TPollSocketEpoll and poll/epoll timeouts
Impact
Linux subscriptions resist signal interruption, but this intermediate build omitted a timeout result reset that the next commit restores; do not stop on build 2.4.16954.
Worth a look
24
Medium
Reachability checks use verified asynchronous connects
GetReachableNetAddr uses SocketConnect(-1), WaitForWithRawSocketError and MakeBlocking, closes failed sockets, and stops once no candidate remains.
Fixes
mormot.net.sock
a74fa349+22-10
net: rewritten GetReachableNetAddr() function
Impact
Address probing no longer counts writable sockets with a pending SO_ERROR as reachable, improving endpoint selection in Delphi/FPC clients.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
25
Medium
AArch64 alignment and Tunnel cleanup receive follow-up fixes
GlobalTime assertions allow padding after unpacking, Delphi POSIX resource comments are clarified, and TTunnelLocal.OpenInternal initializes thread before exception logging and reports the socket consistently.
Fixes
mormot.core.datetime+2
ce3a81b8+11-17
core: some fixes after previous commits
Impact
This removes a startup assertion risk on Delphi AArch64 and prevents undefined diagnostic values if Tunnel setup fails before thread creation.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
26
Medium
epoll waits also retain their timeout after EINTR
EpollWaitNoEintr retries epoll_wait after EINTR and subtracts elapsed time before TPollSocketEpoll.WaitForModified resumes.
Fixes
mormot.net.sock.posix
9c8515b0+24-3
net: fixed EINTR support on TPollSocketEpoll.WaitForModified
Impact
Linux epoll servers keep their requested deadlines and do not surface signal interruptions as missing events. Public APIs are unchanged.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
27
Medium
Remote MAC discovery survives interrupted ARP sends
GetRemoteMacAddress retries its raw ARP sendto call on EINTR, and the poll/epoll timeout helpers initialize their deadline variables explicitly.
Fixes
mormot.net.sock.posix
3af914ac+14-12
net: fixed EINTR support on GetRemoteMacAddress()
Impact
Linux ARP-based MAC lookup is no longer lost to a signal interruption. Other platforms and public APIs are unchanged.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
28
Medium
Tunnel failures retain their socket context
TTunnelLocalThread includes the raw accept error in exceptions, and TTunnelLocal.OpenInternal logs the failing class, message, thread and socket before cleanup.
Fixes
mormot.net.tunnel
93ac7a4a+13-7
net: enhanced Tunnel error handling
Impact
Tunnel connection failures become diagnosable and still close the partial socket. Protocol behavior and public signatures are unchanged.
Units
29
Medium
Absolute XML lookups intentionally move the parser
TXmlParser.GetU returns false for nil paths, preserves position for relative and // paths, but lets an absolute / path rewind and remain at the found position; GetI inherits this behavior.
Fixes
mormot.core.fmt
9dc38579+15-5
core: refined TXmlParser.GetU/GetI process
Impact
Code that expected GetU('/...') or GetI('/...') to restore the prior forward-only parser position will now observe a changed cursor and should review its sequence.
Worth a look
Search for absolute-path GetU/GetI calls and use Save/Restore explicitly if the previous position must survive.
Public API
TXmlParser.GetU / GetIbehaviour-changed — Absolute paths now leave the parser at the result.
Units
30
Medium
SIGPIPE interception uses SIG_IGN and records success
SigPipeIntercept installs SIG_IGN instead of an empty handler and only sets its process flag when fpSigaction succeeds.
Fixes
mormot.core.os.posix
ec6e317b+5-5
core: SigPipeIntercept() cleanup
Impact
POSIX processes get conventional SIGPIPE suppression and can retry initialization after a failed sigaction. Public APIs remain unchanged.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
31
Medium
poll-based socket sets ignore EINTR without losing time
TPollSocketPoll.WaitForModified and WaitForSeveral now call PollNoEintr, so their finite timeout is preserved across signal interruptions.
Fixes
mormot.net.sock.posix
e637b45f+4-4
net: fixed TPollSocketPoll.WaitForModified / WaitForSeveral EINTR support
Impact
POSIX poll backends stop returning empty or failed result sets solely because a signal arrived. Application APIs do not change.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
32
Medium
LogView returns as a Lazarus desktop tool
A new mormot.tools.logview LCL application opens, filters, searches and profiles TSynLog, SynLZ and plain-text files, with DPI-aware layout and queued remote rows.
New features
mormot.tools.logview
307a9fb7+2162-0
tools: port the mORMot 1 LogView sample as a FPC/Lazarus LCL app
Impact
Framework backends are unchanged; FPC/Lazarus users gain a maintained viewer, including safer UI-thread handling of live remote logs.
Units
33
Medium
OpenSSL 4 suppresses SIGPIPE per socket
SSLSetFdNoSigPipe uses BIO_C_SET_SEND_FLAGS with NET_MSG_NOSIGNAL on OpenSSL 4+, falling back to process-wide SigPipeIntercept for OpenSSL 1.1/3.x.
New features
mormot.core.os+2
a413d047+67-20
lib: use new OpenSSL 4+ BIO_C_SET_SEND_FLAGS for MSG_NOSIGNAL
Impact
POSIX applications on OpenSSL 4 avoid changing SIGPIPE handling for the whole process. Older OpenSSL versions retain the historical behavior unless explicitly disabled.
Worth a look
34
Medium
Remote-log callbacks can identify their sender
TRestHttpRemoteLogServer adds CreateWithSender and TRemoteLogReceivedFrom, delivering the connection ID and remote IP; callback fields are assigned before the HTTP server starts.
New features
mormot.rest.http.server
e29490aa+30-7
rest: TRestHttpRemoteLogServer.CreateWithSender
Impact
Existing Create users keep their callback. New Delphi/FPC viewers can separate simultaneous senders, and startup requests no longer race an unassigned callback.
Public API
TRemoteLogReceivedFromadded — Callback including connection ID and remote IP.TRestHttpRemoteLogServer.CreateWithSenderadded — Creates a remote-log server with sender-aware notifications.
35
Medium
Sockets expose their pending SO_ERROR result
TNetSocketWrap adds GetSocketError, querying SOL_SOCKET/SO_ERROR and mapping the raw system value to TNetResult; Delphi POSIX also exports SO_ERROR.
New features
mormot.core.os.delphi+1
a299fb59+22-2
net: new TNetSocketWrap.GetSocketError method
Impact
Low-level Delphi/FPC networking code can inspect asynchronous connect completion correctly, but this intermediate name becomes GetRawSocketError in the next change.
Public API
TNetSocketWrap.GetSocketErroradded — Intermediate name; renamed to GetRawSocketError immediately afterward.
36
Medium
A helper combines connect waiting with SO_ERROR
TNetSocketWrap.WaitForWithRawSocketError waits for write/error events and then returns GetRawSocketError, using nrRetry for an empty event set.
New features
mormot.net.sock
07c8080b+16-2
net: new TNetSocketWrap.WaitForWithRawSocketError method
Impact
Custom asynchronous Delphi/FPC connection code can reuse the same correct completion check as SocketConnect. Existing callers are unaffected.
Public API
TNetSocketWrap.WaitForWithRawSocketErroradded — Waits for socket completion and reads SO_ERROR.
Units
37
Medium
Accept can return the raw socket error
TNetSocketWrap.Accept adds an optional rawError output and passes it through NetLastError, while retaining the existing three-argument call through a default nil value.
New features
mormot.core.os.posix+1
e8de6bf7+7-9
net: enhanced TNetSocketWrap.Accept()
Impact
Servers can log the precise errno behind an accept failure without breaking existing Delphi/FPC source calls.
Public API
TNetSocketWrap.Acceptsignature-changed — Adds optional rawError: PNetErrorInt = nil.
38
Medium
Instance text is precomputed with the formatted log line
TSynLogFamily.PreRenderFmt now writes the instance class/pointer prefix into the same stack buffer outside the writer lock before formatting the message.
Performance
mormot.core.log
a6bb53dc+31-21
core: pre-compute the TSynLog instance pointer text if possible
Impact
Instance-heavy multithreaded logging shortens lock duration further, but this intermediate implementation miscalculates remaining buffer space and is repaired in build 2.4.17000.
Worth a look
Units
39
Medium
Formatted log text is rendered before taking the lock
TSynLog pre-renders up to 4KB into a stack buffer outside the writer lock, trims control bytes, and adds TSynLogFamily.DirectRendering to opt back into in-lock rendering.
Performance
mormot.core.log
ab869875+29-4
core: pre-render formatted text up to 4KB on stack outside of the TSynLog lock
Impact
Multithreaded services reduce time spent in each logger lock. Object/interface arguments still take the slow path, and DirectRendering can preserve custom writer expectations.
Worth a look
Benchmark high-volume logging and enable DirectRendering if a custom writer depends on formatting while locked.
Public API
TSynLogFamily.DirectRenderingadded — Disables the new 4KB pre-rendering fast path.
Units
40
Medium
Modern Android can find ICU without libicudata
Android ICU discovery now falls back to libicuuc.so and libicui18n.so when libicudata.so is absent, then resolves unversioned or versioned symbols as needed.
Compiler & platform
mormot.core.os.posix
36796d3c+11-1
core: enhanced ICU detection on modern Android
Impact
Current Android releases whose ICU data lives in an APEX can expose Unicode conversion support to Delphi/FPC applications again. Other POSIX targets are unchanged.
Upgrade recommended
Upgrade to build 2.4.17002 and exercise this corrected path on every affected Delphi/FPC target before deployment.
Units
41
Medium
Remote logging always uses the portable socket server
TRestHttpRemoteLogServer now selects useHttpSocket on every platform instead of HTTP_DEFAULT_MODE, avoiding Windows http.sys URI registration and privilege-dependent fallback.
Compiler & platform
mormot.rest.http.server
4f487ad9+5-5
rest: TRestHttpRemoteLogServer now uses useHttpSocket on all systems
Impact
Windows remote-log deployments no longer change server backend according to administrator rights. The socket server is sufficient for the intended small client count.
Worth a look
42
Low
Accept failures include the operating-system error
Async and threaded HTTP server accept loops request raw errno from TNetSocketWrap.Accept and add SystemErrorShort to debug logging; banned-address checks run only after success.
Fixes
mormot.net.async+1
d59aeb92+16-11
net: enhanced accept() logged error content
Impact
Operators receive actionable accept diagnostics without a public behavior change. Failed accepts no longer feed an uninitialized peer address to the ban check.
43
Low
LogView keeps key columns visible and remembers font size
LogView prevents text-column clicks from hiding time, level and thread columns, and adds persistent content font sizing through keys, mouse wheel and menu.
New features
mormot.tools.logview
1c454fb6+148-12
tools: LogView keeps the first columns visible and has a custom font size
Impact
Only the Lazarus LogView user interface changes; backend logging and file formats are unaffected.
Units
44
Low
Control characters can be replaced in place
mormot.core.unicode adds TrimControlCharsBuffer, replacing bytes #0 through #31 with spaces directly in a supplied UTF-8 buffer.
New features
mormot.core.unicode
bcf4e877+22-2
core: new TrimControlCharsBuffer() function
Impact
Existing code is unchanged; Delphi/FPC callers gain an allocation-free helper used by the new TSynLog pre-rendering path.
Public API
TrimControlCharsBufferadded — Replaces ASCII control bytes with spaces in place.
Units
45
Low
Short location lookup may omit the hexadecimal fallback
TDebugFile.FindLocationShort adds aNoHex, using PointerToHexShortVar otherwise; the commit also corrects comments and assignment annotations in recent logging code.
New features
mormot.core.log
add4ed16+13-9
core: some logging fixes and TSynLogFile enhancement
Impact
Diagnostic callers can request an empty result when no debug symbol is found instead of receiving only the address. Existing two-argument calls keep hexadecimal fallback.
Public API
TDebugFile.FindLocationShortsignature-changed — Adds optional aNoHex: boolean = false.
Units
46
Low
Pointer text can be written into any ShortString
mormot.core.text adds PointerToHexShortVar, and PointerToHexShort delegates to it instead of duplicating the pointer-width hexadecimal conversion.
New features
mormot.core.text
cd8db464+15-6
core: new PointerToHexShortVar() function
Impact
Existing callers are unchanged; allocation-free diagnostic code can now fill an existing ShortString variable directly.
Public API
PointerToHexShortVaradded — Writes a pointer value into a caller-supplied ShortString.
Units
47
Low
Format arguments can be scanned for object rendering
mormot.core.text adds VarRecHasObject to detect vtObject or vtInterface values that require TTextWriter.WriteObject instead of the fast formatter.
New features
mormot.core.text
906a763f+18-2
core: new VarRecHasObject() function
Impact
The helper supports later logging optimization and does not alter existing application behavior. Its name is changed to VarRecNeedsWriteObject later in the same batch.
Units
48
Low
The platform MSG_NOSIGNAL value becomes public
mormot.net.sock initializes the public NET_MSG_NOSIGNAL variable from the platform constant for reuse by higher-level socket and TLS code.
New features
mormot.net.sock
eabe6fba+7-2
net: new NET_MSG_NOSIGNAL global cross-platform constant
Impact
Existing applications are unaffected; low-level integrations can query the effective flag without duplicating platform conditionals.
Public API
NET_MSG_NOSIGNALadded — Runtime copy of the platform MSG_NOSIGNAL value.
Units
49
Low
Bounded UTF-8 formatting stops parsing once full
TFormatUtf8.InitParse receives MaxSize and stops collecting format blocks once that limit is reached; FormatBufferRaw and FormatShort pass their real capacities.
Performance
mormot.core.text
7a04bb59+14-10
core: optimized TFormatUtf8.InitParse when a maximum size is involved
Impact
Truncated formatting avoids converting unused later arguments, reducing work for fixed buffers while keeping the same bounded output.
Units
50
Low
The object-format probe receives its final name
VarRecHasObject is renamed VarRecNeedsWriteObject with a byte-safe VType test, and TXmlParser comments document the absolute-path cursor behavior.
Under the hood
mormot.core.fmt+1
697af472+10-7
core: some renaming/comment with no functional change
Impact
Only code written against the immediately preceding intermediate helper name must rename it; pre-existing applications have no migration.
Public API
VarRecHasObjectrenamed — Final name is VarRecNeedsWriteObject.
51
Low
AArch64 follow-up only adjusts style and inlining
The commit fixes indentation, marks AAPCS64 va_list helpers inline, and updates the changelog wording for Delphi 13.1 platform support.
Housekeeping
mormot.core.interfaces+1
dfac0653+7-7
core: minor change after previous PR
Impact
There is no functional application impact; Delphi/FPC behavior and public APIs remain the same.