Skip to content

Commit 08de4eb

Browse files
committed
remove I/O from signal handler.
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
1 parent eb49444 commit 08de4eb

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

rclcpp/src/rclcpp/signal_handler.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ void
6868
SignalHandler::signal_handler(
6969
int signum, siginfo_t * siginfo, void * context)
7070
{
71-
RCLCPP_INFO(SignalHandler::get_logger(), "signal_handler(signum=%d)", signum);
7271
auto & instance = SignalHandler::get_global_signal_handler();
7372

7473
auto old_signal_handler = instance.get_old_signal_handler(signum);
@@ -85,13 +84,12 @@ SignalHandler::signal_handler(
8584
old_signal_handler.sa_handler(signum);
8685
}
8786
}
88-
instance.signal_handler_common();
87+
instance.signal_handler_common(signum);
8988
}
9089
#else
9190
void
9291
SignalHandler::signal_handler(int signum)
9392
{
94-
RCLCPP_INFO(SignalHandler::get_logger(), "signal_handler(signum=%d)", signum);
9593
auto & instance = SignalHandler::get_global_signal_handler();
9694
auto old_signal_handler = instance.get_old_signal_handler(signum);
9795
if (
@@ -100,7 +98,7 @@ SignalHandler::signal_handler(int signum)
10098
{
10199
old_signal_handler(signum);
102100
}
103-
instance.signal_handler_common();
101+
instance.signal_handler_common(signum);
104102
}
105103
#endif
106104

@@ -245,13 +243,11 @@ SignalHandler::get_old_signal_handler(int signum)
245243
}
246244

247245
void
248-
SignalHandler::signal_handler_common()
246+
SignalHandler::signal_handler_common(int signum)
249247
{
250248
auto & instance = SignalHandler::get_global_signal_handler();
249+
instance.signal_number_.store(signum);
251250
instance.signal_received_.store(true);
252-
RCLCPP_DEBUG(
253-
get_logger(),
254-
"signal_handler(): notifying deferred signal handler");
255251
instance.notify_signal_handler();
256252
}
257253

@@ -260,6 +256,8 @@ SignalHandler::deferred_signal_handler()
260256
{
261257
while (true) {
262258
if (signal_received_.exchange(false)) {
259+
int signum = signal_number_.load();
260+
RCLCPP_INFO(get_logger(), "signal_handler(signum=%d)", signum);
263261
RCLCPP_DEBUG(get_logger(), "deferred_signal_handler(): shutting down");
264262
for (auto context_ptr : rclcpp::get_contexts()) {
265263
if (context_ptr->get_init_options().shutdown_on_signal) {

rclcpp/src/rclcpp/signal_handler.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class SignalHandler final
116116

117117
/// Common signal handler code between sigaction and non-sigaction versions.
118118
void
119-
signal_handler_common();
119+
signal_handler_common(int signum);
120120

121121
#if defined(RCLCPP_HAS_SIGACTION)
122122
/// Signal handler function.
@@ -189,6 +189,8 @@ class SignalHandler final
189189

190190
// Whether or not a signal has been received.
191191
std::atomic_bool signal_received_ = false;
192+
// The signal number that was received.
193+
std::atomic_int signal_number_ = 0;
192194
// A thread to which signal handling tasks are deferred.
193195
std::thread signal_handler_thread_;
194196

0 commit comments

Comments
 (0)