Skip to content

Commit 675dbac

Browse files
jacobperronahcorde
authored andcommitted
Return OK when finalizing zero-initialized contexts (#842)
Resolves #814 This is consistent behavior with finalizing other types of zero-initialized objects. Signed-off-by: Jacob Perron <[email protected]>
1 parent 885fa21 commit 675dbac

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

rcl/include/rcl/context.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,9 @@ rcl_get_zero_initialized_context(void);
154154
/**
155155
* The context to be finalized must have been previously initialized with
156156
* `rcl_init()`, and then later invalidated with `rcl_shutdown()`.
157+
* A zero-initialized context that has not been initialized can be finalized.
157158
* If context is `NULL`, then `RCL_RET_INVALID_ARGUMENT` is returned.
158-
* If context is zero-initialized, then `RCL_RET_INVALID_ARGUMENT` is returned.
159+
* If context is zero-initialized, then `RCL_RET_OK` is returned.
159160
* If context is initialized and valid (`rcl_shutdown()` was not called on it),
160161
* then `RCL_RET_INVALID_ARGUMENT` is returned.
161162
*

rcl/src/rcl/context.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ rcl_ret_t
4949
rcl_context_fini(rcl_context_t * context)
5050
{
5151
RCL_CHECK_ARGUMENT_FOR_NULL(context, RCL_RET_INVALID_ARGUMENT);
52-
RCL_CHECK_FOR_NULL_WITH_MSG(
53-
context->impl, "context is zero-initialized", return RCL_RET_INVALID_ARGUMENT);
52+
if (!context->impl) {
53+
// Context is zero-initialized
54+
return RCL_RET_OK;
55+
}
5456
if (rcl_context_is_valid(context)) {
5557
RCL_SET_ERROR_MSG("rcl_shutdown() not called on the given context");
5658
return RCL_RET_INVALID_ARGUMENT;

rcl/test/rcl/test_context.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@ TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), bad_fini) {
142142
});
143143

144144
rcl_context_t context = rcl_get_zero_initialized_context();
145+
146+
ret = rcl_context_fini(&context);
147+
EXPECT_EQ(RCL_RET_OK, ret);
148+
145149
ret = rcl_init(0, nullptr, &init_options, &context);
146150
EXPECT_EQ(RCL_RET_OK, ret);
147151

0 commit comments

Comments
 (0)