@@ -57,7 +57,7 @@ MultiThreadedExecutor::spin()
57
57
58
58
void
59
59
60
- MultiThreadedExecutor::spin (std::function<void (const std::exception & e)> exception_handler)
60
+ MultiThreadedExecutor::spin (const std::function<void (const std::exception & e)> & exception_handler)
61
61
{
62
62
if (spinning.exchange (true )) {
63
63
throw std::runtime_error (" spin() called while already spinning" );
@@ -88,38 +88,28 @@ MultiThreadedExecutor::get_number_of_threads()
88
88
void
89
89
MultiThreadedExecutor::run (
90
90
size_t this_thread_number,
91
- std::function<void (const std::exception & e)> exception_handler)
91
+ const std::function<void (const std::exception & e)> & exception_handler)
92
92
{
93
- try {
94
-
95
- (void )this_thread_number;
96
- while (rclcpp::ok (this ->context_ ) && spinning.load ()) {
97
- rclcpp::AnyExecutable any_exec;
98
- {
99
- std::lock_guard wait_lock{wait_mutex_};
100
- if (!rclcpp::ok (this ->context_ ) || !spinning.load ()) {
101
- return ;
102
- }
103
- if (!get_next_executable (any_exec, next_exec_timeout_)) {
104
- continue ;
105
- }
93
+ (void )this_thread_number;
94
+ while (rclcpp::ok (this ->context_ ) && spinning.load ()) {
95
+ rclcpp::AnyExecutable any_exec;
96
+ {
97
+ std::lock_guard wait_lock{wait_mutex_};
98
+ if (!rclcpp::ok (this ->context_ ) || !spinning.load ()) {
99
+ return ;
106
100
}
107
- if (yield_before_execute_ ) {
108
- std::this_thread::yield () ;
101
+ if (! get_next_executable (any_exec, next_exec_timeout_) ) {
102
+ continue ;
109
103
}
110
-
111
- execute_any_executable (any_exec);
112
-
113
- // Clear the callback_group to prevent the AnyExecutable destructor from
114
- // resetting the callback group `can_be_taken_from`
115
- any_exec.callback_group .reset ();
104
+ }
105
+ if (yield_before_execute_) {
106
+ std::this_thread::yield ();
116
107
}
117
108
118
- } catch (const std::exception & e) {
119
- RCLCPP_ERROR_STREAM (
120
- rclcpp::get_logger (" rclcpp" ),
121
- " Exception while spinning : " << e.what ());
109
+ execute_any_executable (any_exec, exception_handler);
122
110
123
- exception_handler (e);
111
+ // Clear the callback_group to prevent the AnyExecutable destructor from
112
+ // resetting the callback group `can_be_taken_from`
113
+ any_exec.callback_group .reset ();
124
114
}
125
115
}
0 commit comments