Skip to content

Commit 499575e

Browse files
committed
feat: ability to override the default allocator
Signed-off-by: Russ Webber <[email protected]>
1 parent cb567ca commit 499575e

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

include/rcutils/allocator.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,21 @@ RCUTILS_WARN_UNUSED
108108
rcutils_allocator_t
109109
rcutils_get_default_allocator(void);
110110

111+
/// Override the default allocator returned by rcutils_get_default_allocator.
112+
/**
113+
* Attribute | Adherence
114+
* ------------------ | -------------
115+
* Allocates Memory | No
116+
* Thread-Safe | No
117+
* Uses Atomics | No
118+
* Lock-Free | Yes
119+
*
120+
* \param[in] override_allocator The allocator to set as the default.
121+
*/
122+
RCUTILS_PUBLIC
123+
void
124+
rcutils_set_default_allocator(rcutils_allocator_t override_allocator);
125+
111126
/// Return true if the given allocator has non-null function pointers.
112127
/**
113128
* \param[in] allocator to be checked by the function

src/allocator.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,31 @@ rcutils_get_zero_initialized_allocator(void)
6969
return zero_allocator;
7070
}
7171

72+
static rcutils_allocator_t rcutils_override_default_allocator = {0};
73+
74+
void
75+
rcutils_set_default_allocator(rcutils_allocator_t override_allocator)
76+
{
77+
if (rcutils_allocator_is_valid(&override_allocator)) {
78+
rcutils_override_default_allocator = override_allocator;
79+
}
80+
}
81+
7282
rcutils_allocator_t
7383
rcutils_get_default_allocator(void)
7484
{
85+
if (rcutils_allocator_is_valid(&rcutils_override_default_allocator)) {
86+
return rcutils_override_default_allocator;
87+
}
88+
7589
static rcutils_allocator_t default_allocator = {
7690
.allocate = __default_allocate,
7791
.deallocate = __default_deallocate,
7892
.reallocate = __default_reallocate,
7993
.zero_allocate = __default_zero_allocate,
8094
.state = NULL,
8195
};
96+
8297
return default_allocator;
8398
}
8499

0 commit comments

Comments
 (0)