@@ -233,6 +233,7 @@ rcl_ret_t
233233rcl_timer_clock (rcl_timer_t * timer , rcl_clock_t * * clock )
234234{
235235 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
236+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
236237 RCL_CHECK_ARGUMENT_FOR_NULL (clock , RCL_RET_INVALID_ARGUMENT );
237238 RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_TIMER_INVALID );
238239 * clock = timer -> impl -> clock ;
@@ -244,6 +245,7 @@ rcl_timer_call(rcl_timer_t * timer)
244245{
245246 RCUTILS_LOG_DEBUG_NAMED (ROS_PACKAGE_NAME , "Calling timer" );
246247 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
248+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
247249 if (rcutils_atomic_load_bool (& timer -> impl -> canceled )) {
248250 RCL_SET_ERROR_MSG ("timer is canceled" );
249251 return RCL_RET_TIMER_CANCELED ;
@@ -294,6 +296,7 @@ rcl_ret_t
294296rcl_timer_is_ready (const rcl_timer_t * timer , bool * is_ready )
295297{
296298 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
299+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
297300 RCL_CHECK_ARGUMENT_FOR_NULL (is_ready , RCL_RET_INVALID_ARGUMENT );
298301 int64_t time_until_next_call ;
299302 rcl_ret_t ret = rcl_timer_get_time_until_next_call (timer , & time_until_next_call );
@@ -311,6 +314,7 @@ rcl_ret_t
311314rcl_timer_get_time_until_next_call (const rcl_timer_t * timer , int64_t * time_until_next_call )
312315{
313316 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
317+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
314318 RCL_CHECK_ARGUMENT_FOR_NULL (time_until_next_call , RCL_RET_INVALID_ARGUMENT );
315319 if (rcutils_atomic_load_bool (& timer -> impl -> canceled )) {
316320 return RCL_RET_TIMER_CANCELED ;
@@ -331,6 +335,7 @@ rcl_timer_get_time_since_last_call(
331335 rcl_time_point_value_t * time_since_last_call )
332336{
333337 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
338+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
334339 RCL_CHECK_ARGUMENT_FOR_NULL (time_since_last_call , RCL_RET_INVALID_ARGUMENT );
335340 rcl_time_point_value_t now ;
336341 rcl_ret_t ret = rcl_clock_get_now (timer -> impl -> clock , & now );
@@ -346,6 +351,7 @@ rcl_ret_t
346351rcl_timer_get_period (const rcl_timer_t * timer , int64_t * period )
347352{
348353 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
354+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
349355 RCL_CHECK_ARGUMENT_FOR_NULL (period , RCL_RET_INVALID_ARGUMENT );
350356 * period = rcutils_atomic_load_uint64_t (& timer -> impl -> period );
351357 return RCL_RET_OK ;
@@ -354,9 +360,14 @@ rcl_timer_get_period(const rcl_timer_t * timer, int64_t * period)
354360rcl_ret_t
355361rcl_timer_exchange_period (const rcl_timer_t * timer , int64_t new_period , int64_t * old_period )
356362{
363+ if (new_period < 0 ) {
364+ return RCL_RET_INVALID_ARGUMENT ;
365+ }
366+
357367 RCUTILS_CAN_RETURN_WITH_ERROR_OF (RCL_RET_INVALID_ARGUMENT );
358368
359369 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
370+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
360371 RCL_CHECK_ARGUMENT_FOR_NULL (old_period , RCL_RET_INVALID_ARGUMENT );
361372 * old_period = rcutils_atomic_exchange_uint64_t (& timer -> impl -> period , new_period );
362373 RCUTILS_LOG_DEBUG_NAMED (
@@ -400,6 +411,7 @@ rcl_ret_t
400411rcl_timer_is_canceled (const rcl_timer_t * timer , bool * is_canceled )
401412{
402413 RCL_CHECK_ARGUMENT_FOR_NULL (timer , RCL_RET_INVALID_ARGUMENT );
414+ RCL_CHECK_ARGUMENT_FOR_NULL (timer -> impl , RCL_RET_INVALID_ARGUMENT );
403415 RCL_CHECK_ARGUMENT_FOR_NULL (is_canceled , RCL_RET_INVALID_ARGUMENT );
404416 * is_canceled = rcutils_atomic_load_bool (& timer -> impl -> canceled );
405417 return RCL_RET_OK ;
0 commit comments