Skip to content

Commit 015f05e

Browse files
authored
Save allocator for RCL_CLOCK_UNINITIALIZED clock. (#623)
* Save allocator when setting uninitialized clock * Add tests for clock types init/fini * Remove extra calls to set clock allocator * Remove tests not related to this PR * Replace test to make it clearer what is tested in the PR Signed-off-by: Jorge Perez <[email protected]>
1 parent f18127a commit 015f05e

File tree

2 files changed

+8
-10
lines changed

2 files changed

+8
-10
lines changed

rcl/src/rcl/time.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,14 @@ rcl_get_system_time(void * data, rcl_time_point_value_t * current_time)
4848

4949
// Internal method for zeroing values on init, assumes clock is valid
5050
static void
51-
rcl_init_generic_clock(rcl_clock_t * clock)
51+
rcl_init_generic_clock(rcl_clock_t * clock, rcl_allocator_t * allocator)
5252
{
5353
clock->type = RCL_CLOCK_UNINITIALIZED;
5454
clock->jump_callbacks = NULL;
5555
clock->num_jump_callbacks = 0u;
5656
clock->get_now = NULL;
5757
clock->data = NULL;
58+
clock->allocator = *allocator;
5859
}
5960

6061
// The function used to get the current ros time.
@@ -91,7 +92,7 @@ rcl_clock_init(
9192
switch (clock_type) {
9293
case RCL_CLOCK_UNINITIALIZED:
9394
RCL_CHECK_ARGUMENT_FOR_NULL(clock, RCL_RET_INVALID_ARGUMENT);
94-
rcl_init_generic_clock(clock);
95+
rcl_init_generic_clock(clock, allocator);
9596
return RCL_RET_OK;
9697
case RCL_ROS_TIME:
9798
return rcl_ros_clock_init(clock, allocator);
@@ -144,7 +145,7 @@ rcl_ros_clock_init(
144145
{
145146
RCL_CHECK_ARGUMENT_FOR_NULL(clock, RCL_RET_INVALID_ARGUMENT);
146147
RCL_CHECK_ARGUMENT_FOR_NULL(allocator, RCL_RET_INVALID_ARGUMENT);
147-
rcl_init_generic_clock(clock);
148+
rcl_init_generic_clock(clock, allocator);
148149
clock->data = allocator->allocate(sizeof(rcl_ros_clock_storage_t), allocator->state);
149150
if (NULL == clock->data) {
150151
RCL_SET_ERROR_MSG("allocating memory failed");
@@ -157,7 +158,6 @@ rcl_ros_clock_init(
157158
storage->active = false;
158159
clock->get_now = rcl_get_ros_time;
159160
clock->type = RCL_ROS_TIME;
160-
clock->allocator = *allocator;
161161
return RCL_RET_OK;
162162
}
163163

@@ -186,10 +186,9 @@ rcl_steady_clock_init(
186186
{
187187
RCL_CHECK_ARGUMENT_FOR_NULL(clock, RCL_RET_INVALID_ARGUMENT);
188188
RCL_CHECK_ARGUMENT_FOR_NULL(allocator, RCL_RET_INVALID_ARGUMENT);
189-
rcl_init_generic_clock(clock);
189+
rcl_init_generic_clock(clock, allocator);
190190
clock->get_now = rcl_get_steady_time;
191191
clock->type = RCL_STEADY_TIME;
192-
clock->allocator = *allocator;
193192
return RCL_RET_OK;
194193
}
195194

@@ -213,10 +212,9 @@ rcl_system_clock_init(
213212
{
214213
RCL_CHECK_ARGUMENT_FOR_NULL(clock, RCL_RET_INVALID_ARGUMENT);
215214
RCL_CHECK_ARGUMENT_FOR_NULL(allocator, RCL_RET_INVALID_ARGUMENT);
216-
rcl_init_generic_clock(clock);
215+
rcl_init_generic_clock(clock, allocator);
217216
clock->get_now = rcl_get_system_time;
218217
clock->type = RCL_SYSTEM_TIME;
219-
clock->allocator = *allocator;
220218
return RCL_RET_OK;
221219
}
222220

rcl/test/rcl/test_time.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,11 @@ TEST(CLASSNAME(rcl_time, RMW_IMPLEMENTATION), specific_clock_instantiation) {
263263
rcl_allocator_t allocator = rcl_get_default_allocator();
264264
{
265265
rcl_clock_t uninitialized_clock;
266-
rcl_ret_t ret = rcl_clock_init(
267-
RCL_CLOCK_UNINITIALIZED, &uninitialized_clock, &allocator);
266+
rcl_ret_t ret = rcl_clock_init(RCL_CLOCK_UNINITIALIZED, &uninitialized_clock, &allocator);
268267
EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string().str;
269268
EXPECT_EQ(uninitialized_clock.type, RCL_CLOCK_UNINITIALIZED) <<
270269
"Expected time source of type RCL_CLOCK_UNINITIALIZED";
270+
EXPECT_TRUE(rcutils_allocator_is_valid(&(uninitialized_clock.allocator)));
271271
}
272272
{
273273
rcl_clock_t ros_clock;

0 commit comments

Comments
 (0)