Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Bdd/Targets/Common/BddTargetTlsSender_OpenSsl_PosixTcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
struct SolidSyslogResolver;

static struct SolidSyslogStream* underlyingStream;
static SolidSyslogTlsStreamStorage tlsStreamStorage;

static struct SolidSyslogStream* tlsStream;
static struct SolidSyslogSender* sender;

Expand All @@ -35,7 +35,7 @@ struct SolidSyslogSender* BddTargetTlsSender_Create(struct SolidSyslogResolver*
tlsStreamConfig.CaBundlePath = BddTargetTlsConfig_GetCaBundlePath();
tlsStreamConfig.ServerName = BddTargetTlsConfig_GetServerName();
}
tlsStream = SolidSyslogTlsStream_Create(&tlsStreamStorage, &tlsStreamConfig);
tlsStream = SolidSyslogTlsStream_Create(&tlsStreamConfig);

static struct SolidSyslogStreamSenderConfig senderConfig;
senderConfig = (struct SolidSyslogStreamSenderConfig) {0};
Expand Down
4 changes: 2 additions & 2 deletions Bdd/Targets/Common/BddTargetTlsSender_OpenSsl_WinsockTcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
struct SolidSyslogResolver;

static struct SolidSyslogStream* underlyingStream;
static SolidSyslogTlsStreamStorage tlsStreamStorage;

static struct SolidSyslogStream* tlsStream;
static struct SolidSyslogSender* sender;

Expand All @@ -35,7 +35,7 @@ struct SolidSyslogSender* BddTargetTlsSender_Create(struct SolidSyslogResolver*
tlsStreamConfig.CaBundlePath = BddTargetTlsConfig_GetCaBundlePath();
tlsStreamConfig.ServerName = BddTargetTlsConfig_GetServerName();
}
tlsStream = SolidSyslogTlsStream_Create(&tlsStreamStorage, &tlsStreamConfig);
tlsStream = SolidSyslogTlsStream_Create(&tlsStreamConfig);

static struct SolidSyslogStreamSenderConfig senderConfig;
senderConfig = (struct SolidSyslogStreamSenderConfig) {0};
Expand Down
1 change: 1 addition & 0 deletions Bdd/Targets/FreeRtos/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ add_executable(SolidSyslogBddTarget
${CMAKE_CURRENT_SOURCE_DIR}/Common/CmsdkUart.c
${CMAKE_CURRENT_SOURCE_DIR}/Common/Syscalls.c
${CMAKE_SOURCE_DIR}/Platform/FatFs/Source/SolidSyslogFatFsFile.c
${CMAKE_SOURCE_DIR}/Platform/FatFs/Source/SolidSyslogFatFsFileStatic.c
${CMAKE_SOURCE_DIR}/Platform/FreeRtos/Source/SolidSyslogAddress.c
${CMAKE_SOURCE_DIR}/Platform/FreeRtos/Source/SolidSyslogFreeRtosDatagram.c
${CMAKE_SOURCE_DIR}/Platform/FreeRtos/Source/SolidSyslogFreeRtosDatagramStatic.c
Expand Down
7 changes: 2 additions & 5 deletions Bdd/Targets/FreeRtos/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,6 @@ static volatile bool solidSyslogTeardown = false;
* in our ffconf.h). */
static const char STORE_PATH_PREFIX[] = "STORE";

static SolidSyslogFatFsFileStorage storeFileStorage;

/* FATFS object lives in .bss because f_mount stores its address inside the
* FatFs volume registry — the object must outlive every f_open / f_stat /
* f_unlink. One per volume (FF_VOLUMES = 1). */
Expand Down Expand Up @@ -225,7 +223,6 @@ static volatile bool pendingNoSd = false;
* .Store and pass the same struct back into SolidSyslog_Create. */
static struct SolidSyslogConfig solidSyslogConfig;
static struct SolidSyslogStructuredData* sdList[3];
static SolidSyslogStdAtomicCounterStorage atomicCounterStorage;
static struct SolidSyslogAtomicCounter* atomicCounter = NULL;
static struct SolidSyslogStructuredData* metaSd = NULL;
static struct SolidSyslogStructuredData* timeQualitySd = NULL;
Expand Down Expand Up @@ -581,7 +578,7 @@ static bool RebuildWithFileStore(void)
/* Build a fresh FatFs-backed BlockStore. With the volume mounted above,
* BlockSequence_Open's f_stat / f_open calls now hit a live filesystem
* via disk_read / disk_write semihosting traps. */
storeFile = SolidSyslogFatFsFile_Create(&storeFileStorage);
storeFile = SolidSyslogFatFsFile_Create();
storeBlockDevice = SolidSyslogFileBlockDevice_Create(storeFile, STORE_PATH_PREFIX);

struct SolidSyslogSecurityPolicy* policy = SolidSyslogCrc16Policy_Create();
Expand Down Expand Up @@ -826,7 +823,7 @@ static void InteractiveTask(void* argument)
currentStore = SolidSyslogNullStore_Get();
currentStoreIsFile = false;

atomicCounter = SolidSyslogStdAtomicCounter_Create(&atomicCounterStorage);
atomicCounter = SolidSyslogStdAtomicCounter_Create();
struct SolidSyslogMetaSdConfig metaConfig = {
.Counter = atomicCounter,
.GetSysUpTime = SolidSyslogFreeRtosSysUpTime_Get,
Expand Down
3 changes: 1 addition & 2 deletions Bdd/Targets/Linux/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,7 @@ int main(int argc, char* argv[])
struct SolidSyslogStore* store = CreateStore(&options);

struct SolidSyslogBuffer* buffer = SolidSyslogPosixMessageQueueBuffer_Create(SOLIDSYSLOG_MAX_MESSAGE_SIZE, 10);
SolidSyslogStdAtomicCounterStorage counterStorage;
struct SolidSyslogAtomicCounter* counter = SolidSyslogStdAtomicCounter_Create(&counterStorage);
struct SolidSyslogAtomicCounter* counter = SolidSyslogStdAtomicCounter_Create();
struct SolidSyslogMetaSdConfig metaConfig = {
.Counter = counter,
.GetSysUpTime = SolidSyslogPosixSysUpTime_Get,
Expand Down
3 changes: 1 addition & 2 deletions Bdd/Targets/Windows/BddTargetWindows.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ static const char* const STORE_PATH_PREFIX = "Bdd/output/STORE";
static const char* const THRESHOLD_MARKER_PATH = "Bdd/output/solidsyslog_threshold_marker.log";

static uint8_t bufferRing[SOLIDSYSLOG_CIRCULAR_BUFFER_RING_BYTES(BDD_TARGET_BUFFER_MESSAGES)];
static SolidSyslogWindowsAtomicCounterStorage counterStorage;
static volatile bool shutdownFlag;

/* Created in CreateSender, destroyed in DestroySender — held in file scope so
Expand Down Expand Up @@ -299,7 +298,7 @@ int BddTargetWindows_Run(int argc, char* argv[])

struct SolidSyslogMutex* mutex = SolidSyslogWindowsMutex_Create();
struct SolidSyslogBuffer* buffer = SolidSyslogCircularBuffer_Create(mutex, bufferRing, sizeof(bufferRing));
struct SolidSyslogAtomicCounter* counter = SolidSyslogWindowsAtomicCounter_Create(&counterStorage);
struct SolidSyslogAtomicCounter* counter = SolidSyslogWindowsAtomicCounter_Create();
struct SolidSyslogMetaSdConfig metaConfig = {
.Counter = counter,
.GetSysUpTime = SolidSyslogWindowsSysUpTime_Get,
Expand Down
8 changes: 5 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ live under `Core/Interface/`; platform-specific helpers (the `SolidSyslogPosix*`
| `SolidSyslogUdpSender.h` | System setup code using UDP transport | `SolidSyslogUdpSenderConfig` (resolver, datagram, endpoint, endpointVersion), `SolidSyslogUdpSender_Create(config)`, `_Destroy(sender)`. Instance struct lives in a library-internal static pool (E11); `_Destroy` takes the handle returned by `_Create`. Pool-exhaustion and bad-config fallback is the shared `SolidSyslogNullSender`. |
| `SolidSyslogPosixTcpStream.h` | System setup code on POSIX targets using non-blocking TCP with bounded connect/keepalive | `SolidSyslogPosixTcpStream_Create(void)`, `_Destroy(base)`. Instance struct lives in a library-internal static pool (E11); default pool size 2 to support the BDD-target plain-TCP + TLS-underlying-TCP pair. Pool-exhaustion fallback is the shared `SolidSyslogNullStream`. |
| `SolidSyslogStreamSender.h` | System setup code using octet-framed transport (RFC 6587) over any Stream — `SolidSyslogPosixTcpStream` (POSIX TCP), `SolidSyslogWinsockTcpStream` (Windows TCP), `SolidSyslogFreeRtosTcpStream` (FreeRTOS-Plus-TCP), `SolidSyslogTlsStream` (TLS; OpenSSL reference integration), or a caller-supplied Stream backend | `SolidSyslogStreamSenderConfig` (resolver, stream, endpoint, endpointVersion), `SolidSyslogStreamSender_Create(config)`, `_Destroy(base)`. Instance struct lives in a library-internal static pool (E11); `_Destroy` takes the handle returned by `_Create`. Pool exhaustion resolves to the shared `SolidSyslogNullSender`. |
| `SolidSyslogTlsStream.h` | System setup code using TLS over an injected `SolidSyslogStream` transport (OpenSSL reference integration) | `SolidSyslogTlsStreamConfig` (transport, sleep, caBundlePath, serverName, cipherList, clientCertChainPath, clientKeyPath), `SolidSyslogTlsStream_Create(config)`, `_Destroy(base)`. Instance struct lives in a library-internal static pool (E11). Pool-exhaustion fallback is the shared `SolidSyslogNullStream`. |
| `SolidSyslogSwitchingSender.h` | System setup code composing multiple inner senders | `SolidSyslogSwitchingSenderConfig` (senders, senderCount, selector), `SolidSyslogSwitchingSenderSelector`, `SolidSyslogSwitchingSender_Create(config)`, `_Destroy(sender)`. Instance struct lives in a library-internal static pool (E11); `_Destroy` takes the handle returned by `_Create`. Out-of-range selector and pool exhaustion both resolve to the shared `SolidSyslogNullSender`. |
| `SolidSyslogBuffer.h` | Library internals consuming a buffer (Service algorithm) | `SolidSyslogBuffer_Write`, `_Read` |
| `SolidSyslogNullBuffer.h` | Any code installing a no-op buffer slot (Read returns `false`/`bytesRead=0`; Write swallows the record) | `SolidSyslogNullBuffer_Get` |
Expand Down Expand Up @@ -368,7 +369,7 @@ live under `Core/Interface/`; platform-specific helpers (the `SolidSyslogPosix*`
| `SolidSyslogCrc16.h` | Any code needing CRC-16 computation | `SolidSyslogCrc16_Compute` |
| `SolidSyslogPosixFile.h` | System setup code using POSIX file I/O | `SolidSyslogPosixFile_Create(void)`, `_Destroy(base)`. Instance struct lives in a library-internal static pool (E11). Pool-exhaustion fallback is the shared `SolidSyslogNullFile`. |
| `SolidSyslogWindowsFile.h` | System setup code using Windows file I/O (MSVC `<io.h>`) | `SolidSyslogWindowsFile_Create(void)`, `_Destroy(base)`. Instance struct lives in a library-internal static pool (E11). Pool-exhaustion fallback is the shared `SolidSyslogNullFile`. |
| `SolidSyslogFatFsFile.h` | System setup code on targets using ChaN FatFs as the file layer (bare-metal flash / SD / eMMC, FreeRTOS, Zephyr, NuttX, …) | `SolidSyslogFatFsFileStorage`, `SOLIDSYSLOG_FATFS_FILE_SIZE`, `SolidSyslogFatFsFile_Create(storage)`, `_Destroy(file)` (wraps `f_open` / `f_close` / `f_read` / `f_write` with `f_sync` after every successful write so a power loss never loses a record the BlockStore claimed it stored; integrator supplies `diskio.c` and — if `FF_FS_REENTRANT=1` — `ffsystem.c`) |
| `SolidSyslogFatFsFile.h` | System setup code on targets using ChaN FatFs as the file layer (bare-metal flash / SD / eMMC, FreeRTOS, Zephyr, NuttX, …) | `SolidSyslogFatFsFile_Create(void)`, `_Destroy(file)` (wraps `f_open` / `f_close` / `f_read` / `f_write` with `f_sync` after every successful write so a power loss never loses a record the BlockStore claimed it stored; integrator supplies `diskio.c` and — if `FF_FS_REENTRANT=1` — `ffsystem.c`). Instance struct lives in a library-internal static pool (E11). Pool-exhaustion fallback is the shared `SolidSyslogNullFile`. |
| `SolidSyslogPosixClock.h` | System setup code using POSIX clock | `SolidSyslogPosixClock_GetTimestamp` |
| `SolidSyslogPosixHostname.h` | String callback implementor using POSIX hostname | `SolidSyslogPosixHostname_Get` (writes into `SolidSyslogFormatter*`) |
| `SolidSyslogPosixProcessId.h` | String callback implementor using POSIX process ID | `SolidSyslogPosixProcessId_Get` (writes into `SolidSyslogFormatter*`) |
Expand All @@ -387,8 +388,9 @@ live under `Core/Interface/`; platform-specific helpers (the `SolidSyslogPosix*`
| `SolidSyslogMetaSd.h` | System setup code using meta SD (sequenceId, sysUpTime, language) | `SolidSyslogMetaSdConfig` (counter, getSysUpTime, getLanguage — each independently optional via NULL), `SolidSyslogSysUpTimeFunction`, `SolidSyslogMetaSd_Create(config)`, `_Destroy(sd)`. Instance struct lives in a library-internal static pool (E11). Bad-config and pool exhaustion both resolve to the shared `SolidSyslogNullSd`. |
| `SolidSyslogAtomicCounter.h` | Any code holding a counter handle | `SolidSyslogAtomicCounter_Increment(base)` — public vtable-dispatched call. Wrap-aware in [1, 2³¹ - 1] per RFC 5424 §7.3.1, never returns 0. |
| `SolidSyslogAtomicCounterDefinition.h` | AtomicCounter implementors (extension point) | `SolidSyslogAtomicCounter` vtable struct (`Increment` function pointer) |
| `SolidSyslogStdAtomicCounter.h` | System setup code on platforms with C11 `<stdatomic.h>` | `SolidSyslogStdAtomicCounterStorage`, `SOLIDSYSLOG_STDATOMICCOUNTER_SIZE`, `SolidSyslogStdAtomicCounter_Create(storage)`, `_Destroy(base)`. Uses `_Atomic uint32_t` + `atomic_compare_exchange_strong_explicit` CAS loop. |
| `SolidSyslogWindowsAtomicCounter.h` | System setup code on Windows targets without `<stdatomic.h>` (legacy MSVC) | `SolidSyslogWindowsAtomicCounterStorage`, `SOLIDSYSLOG_WINDOWSATOMICCOUNTER_SIZE`, `SolidSyslogWindowsAtomicCounter_Create(storage)`, `_Destroy(base)`. Uses `volatile LONG` + `InterlockedCompareExchange` CAS loop. |
| `SolidSyslogNullAtomicCounter.h` | Any code installing a no-op counter slot (`Increment` returns `1U` unconditionally — RFC 5424 §7.3.1 forbids `0`, and `1` is indistinguishable from the post-power-on / post-wrap state) | `SolidSyslogNullAtomicCounter_Get` |
| `SolidSyslogStdAtomicCounter.h` | System setup code on platforms with C11 `<stdatomic.h>` | `SolidSyslogStdAtomicCounter_Create(void)`, `_Destroy(base)`. Uses `_Atomic uint32_t` + `atomic_compare_exchange_strong_explicit` CAS loop. Instance struct lives in a library-internal static pool (E11). Pool-exhaustion fallback is the shared `SolidSyslogNullAtomicCounter`. |
| `SolidSyslogWindowsAtomicCounter.h` | System setup code on Windows targets without `<stdatomic.h>` (legacy MSVC) | `SolidSyslogWindowsAtomicCounter_Create(void)`, `_Destroy(base)`. Uses `volatile LONG` + `InterlockedCompareExchange` CAS loop. Instance struct lives in a library-internal static pool (E11). Pool-exhaustion fallback is the shared `SolidSyslogNullAtomicCounter`. |
| `SolidSyslogTimeQuality.h` | Any code providing time quality data | `SolidSyslogTimeQuality`, `SolidSyslogTimeQualityFunction`, `SOLIDSYSLOG_SYNC_ACCURACY_OMIT` |
| `SolidSyslogTimeQualitySd.h` | System setup code using timeQuality SD | `SolidSyslogTimeQualitySd_Create(getTimeQuality)`, `_Destroy(sd)`. Instance struct lives in a library-internal static pool (E11). Pool exhaustion resolves to the shared `SolidSyslogNullSd`. |
| `SolidSyslogOriginSd.h` | System setup code using origin SD (software, swVersion, enterpriseId, ip) | `SolidSyslogOriginSdConfig` (software, swVersion, enterpriseId, getIpCount, getIpAt — each independently optional via NULL), `SolidSyslogOriginIpCountFunction`, `SolidSyslogOriginIpAtFunction`, `SolidSyslogOriginSd_Create(config)`, `_Destroy(sd)`. Instance struct lives in a library-internal static pool (E11); each slot carries the pre-formatted static-prefix Formatter storage. Pool exhaustion resolves to the shared `SolidSyslogNullSd`. |
Expand Down
12 changes: 12 additions & 0 deletions Core/Interface/SolidSyslogNullAtomicCounter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef SOLIDSYSLOGNULLATOMICCOUNTER_H
#define SOLIDSYSLOGNULLATOMICCOUNTER_H

#include "ExternC.h"

EXTERN_C_BEGIN

struct SolidSyslogAtomicCounter* SolidSyslogNullAtomicCounter_Get(void);

EXTERN_C_END

#endif /* SOLIDSYSLOGNULLATOMICCOUNTER_H */
86 changes: 86 additions & 0 deletions Core/Interface/SolidSyslogTunablesDefaults.h
Original file line number Diff line number Diff line change
Expand Up @@ -541,4 +541,90 @@
#error "SOLIDSYSLOG_FREE_RTOS_TCP_STREAM_POOL_SIZE must be >= 1"
#endif

/*
* Number of SolidSyslogStdAtomicCounter instances the library's
* internal static pool can simultaneously hold. Each instance carries
* a single _Atomic uint32_t (the sequenceId counter).
*
* Default 1 — RFC 5424 sequenceIds are scoped per SolidSyslog instance,
* and almost all integrators run a single SolidSyslog instance per
* process. Bump via SOLIDSYSLOG_USER_TUNABLES_FILE if more than one is
* genuinely needed (e.g. several independent SolidSyslog instances).
*
* Floor: 1. Sub-floor values rejected at compile time.
*/
#ifndef SOLIDSYSLOG_STD_ATOMIC_COUNTER_POOL_SIZE
/* NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -- macro form required for preprocessor visibility (floor #if) and C array-size const-expr. */
#define SOLIDSYSLOG_STD_ATOMIC_COUNTER_POOL_SIZE 1U
#endif

#if SOLIDSYSLOG_STD_ATOMIC_COUNTER_POOL_SIZE < 1
#error "SOLIDSYSLOG_STD_ATOMIC_COUNTER_POOL_SIZE must be >= 1"
#endif

/*
* Number of SolidSyslogWindowsAtomicCounter instances the library's
* internal static pool can simultaneously hold. Each instance carries
* a single `volatile LONG` (the sequenceId counter, manipulated via
* `InterlockedCompareExchange`).
*
* Default 1 — RFC 5424 sequenceIds are scoped per SolidSyslog instance,
* and almost all integrators run a single SolidSyslog instance per
* process. Bump via SOLIDSYSLOG_USER_TUNABLES_FILE if more than one is
* genuinely needed.
*
* Floor: 1. Sub-floor values rejected at compile time.
*/
#ifndef SOLIDSYSLOG_WINDOWS_ATOMIC_COUNTER_POOL_SIZE
/* NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -- macro form required for preprocessor visibility (floor #if) and C array-size const-expr. */
#define SOLIDSYSLOG_WINDOWS_ATOMIC_COUNTER_POOL_SIZE 1U
#endif

#if SOLIDSYSLOG_WINDOWS_ATOMIC_COUNTER_POOL_SIZE < 1
#error "SOLIDSYSLOG_WINDOWS_ATOMIC_COUNTER_POOL_SIZE must be >= 1"
#endif

/*
* Number of SolidSyslogFatFsFile instances the library's internal static
* pool can simultaneously hold. Each instance carries a FatFs FIL object
* (~56 B header + 512 B sector buffer when FF_MAX_SS=512, FF_FS_TINY=0)
* plus an IsOpen flag.
*
* Default 1 — store-and-forward integrations wire a single file under
* BlockStore + FileBlockDevice; that's the dominant pattern. Bump via
* SOLIDSYSLOG_USER_TUNABLES_FILE if more than one is genuinely needed.
*
* Floor: 1. Sub-floor values rejected at compile time.
*/
#ifndef SOLIDSYSLOG_FATFS_FILE_POOL_SIZE
/* NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -- macro form required for preprocessor visibility (floor #if) and C array-size const-expr. */
#define SOLIDSYSLOG_FATFS_FILE_POOL_SIZE 1U
#endif

#if SOLIDSYSLOG_FATFS_FILE_POOL_SIZE < 1
#error "SOLIDSYSLOG_FATFS_FILE_POOL_SIZE must be >= 1"
#endif

/*
* Number of SolidSyslogTlsStream instances the library's internal static
* pool can simultaneously hold. Each instance carries an SSL_CTX*, SSL*,
* BIO_METHOD*, and the integrator's TlsStreamConfig (transport pointer,
* sleep callback, cert/key/CA paths).
*
* Default 1 — TLS senders are scoped per destination and almost all
* integrators wire a single TLS sender per process. Bump via
* SOLIDSYSLOG_USER_TUNABLES_FILE if more than one is genuinely needed
* (e.g. multi-destination egress with separate TLS sessions per peer).
*
* Floor: 1. Sub-floor values rejected at compile time.
*/
#ifndef SOLIDSYSLOG_TLS_STREAM_POOL_SIZE
/* NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -- macro form required for preprocessor visibility (floor #if) and C array-size const-expr. */
#define SOLIDSYSLOG_TLS_STREAM_POOL_SIZE 1U
#endif

#if SOLIDSYSLOG_TLS_STREAM_POOL_SIZE < 1
#error "SOLIDSYSLOG_TLS_STREAM_POOL_SIZE must be >= 1"
#endif

#endif /* SOLIDSYSLOG_TUNABLES_DEFAULTS_H */
8 changes: 6 additions & 2 deletions Core/Source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,17 @@ set(SOURCES
)

if(HAVE_ATOMIC_COUNTER)
list(APPEND SOURCES SolidSyslogAtomicCounter.c)
list(APPEND SOURCES
SolidSyslogAtomicCounter.c
SolidSyslogNullAtomicCounter.c
)
endif()
# SolidSyslogAtomicCounter.c is the public vtable dispatcher — included
# under the same HAVE_ATOMIC_COUNTER gate as the platform impls
# (HAVE_STDATOMIC_H -> Platform/Atomics, HAVE_WINDOWS_INTERLOCKED ->
# Platform/Windows), so it's only compiled when at least one atomic
# backend is available.
# backend is available. SolidSyslogNullAtomicCounter.c is the shared
# pool-exhaustion fallback for both backends.

if(SOLIDSYSLOG_POSIX OR SOLIDSYSLOG_WINSOCK OR DEFINED ENV{FREERTOS_KERNEL_PATH})
list(APPEND SOURCES
Expand Down
Loading
Loading