Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged sm_coretest_forced_finish_1 at Robotics Stack Exchange
Package Summary
| Version | 3.1.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/robosoft-ai/SMACC2.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-11-06 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Brett Aldrich
Authors
sm_coretest_forced_finish_1
Core test for the forced finish of an asynchronous client behavior. It is not a
reference state machine; it exists to drive one core code path on demand, like
sm_coretest_transition_speed_1 next to it.
What it does
StA ──EvCountdownEnd──▶ StRest ──EvTimer<CbTimerCountdownLoop>──▶ StA
│ │
└── EvCbSuccess/EvCbFinished<CbSleepFor, OrSleep> ──▶ StTrap (terminal) ◀──┘
-
StArunsCbSleepFor(30s)inOrSleepandCbTimerCountdownOnce(1s)inOrTimer, plus anSrEventCountdown(1)reactor on the timer event. The timer always wins, so on everyStAexit the state machine thread callsrequestForceFinish()on the sleep behavior while itsonEntrythread pollsisShutdownRequested(). The behavior then postsEvCbSuccessandEvCbFinishedwithCURRENT_STATElifetime while the machine isSTATE_EXITING, so both hit the discard path inISmaccStateMachine::postEvent. -
StRestwaits 1 s on aCbTimerCountdownLoop. It is deliberately a different timer behavior thanStA’s:StA’s ownEvTimer<CbTimerCountdownOnce>is still queued behind the reactor’sEvCountdownEndwhenStRestis entered and would otherwise fireStRest’s reaction immediately. -
StTrapis terminal and logsFATAL "TRAP ENTERED". BothStAandStResttransition to it on any sleep event. The sleep can never finish withinStA’s 1 s lifetime, so a sleep event processed anywhere is one that crossed a state exit instead of being discarded.
One cycle takes 2 s. Expected per cycle: one requestForceFinish, two
CURRENT STATE SCOPED EVENT DISCARDED warnings, zero TRAP ENTERED.
Running
ros2 launch sm_coretest_forced_finish_1 sm_coretest_forced_finish_1.launch.py
# output is teed to /tmp/sm_coretest_forced_finish_1_latest.log
Quick check of a log:
L=/tmp/sm_coretest_forced_finish_1_latest.log
echo "cycles: $(grep -ac '\[StRest\] Entered' $L) discards: $(grep -ac 'EVENT DISCARDED' $L) trap: $(grep -ac 'TRAP ENTERED' $L)"
Under sanitizers
Build the core and this package into a separate build/install base with
-fsanitize=thread,undefined or -fsanitize=address,undefined -fsanitize-recover=address,
then run the node binary directly (not through ros2 run with a stdbuf prefix,
which preloads a library ahead of the sanitizer runtime). ThreadSanitizer needs
setarch x86_64 -R on kernels with 32-bit mmap randomization. For LeakSanitizer
to report, send SIGINT while the machine is in StRest, when no behavior thread
is alive. The full procedure and the recorded results are in
docs/smacc2_core_defect_fix_study.md at the repository root.
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| smacc2 | |
| cl_ros2_timer | |
| sr_event_countdown | |
| rclcpp |