Skip to content

Commit 8f34836

Browse files
stefan-iligcbot
authored andcommitted
Don't partially set signal handlers
If some of the signal handlers are already set we can get into situation where we can not clear our handlers. This can lead to infinite loops.
1 parent 181a5bc commit 8f34836

File tree

1 file changed

+9
-15
lines changed

1 file changed

+9
-15
lines changed

IGC/AdaptorOCL/ocl_igc_interface/impl/igc_signal_guard.h

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,23 @@ SPDX-License-Identifier: MIT
99
#ifndef IGC_SIGNAL_GUARD_H
1010
#define IGC_SIGNAL_GUARD_H
1111

12-
#include <setjmp.h>
13-
#include <signal.h>
12+
#include <csignal>
1413

15-
namespace IGC {
16-
namespace detail {
14+
namespace IGC::detail {
1715
class SignalGuard {
1816
public:
1917
SignalGuard(int Signal, void (*Handler)(int, siginfo_t *, void *))
2018
: Signal(Signal) {
2119
sigaction(Signal, nullptr, &SAOld);
22-
if (SAOld.sa_handler == SIG_DFL) {
23-
struct sigaction SA;
24-
sigemptyset(&SA.sa_mask);
25-
SA.sa_sigaction = Handler;
26-
SA.sa_flags = 0;
27-
sigaction(Signal, &SA, nullptr);
28-
}
20+
struct sigaction SA{};
21+
sigemptyset(&SA.sa_mask);
22+
SA.sa_sigaction = Handler;
23+
SA.sa_flags = 0;
24+
sigaction(Signal, &SA, nullptr);
2925
}
3026

3127
~SignalGuard() {
32-
if (SAOld.sa_handler == SIG_DFL)
33-
sigaction(Signal, &SAOld, nullptr);
28+
sigaction(Signal, &SAOld, nullptr);
3429
}
3530

3631
SignalGuard(const SignalGuard &) = delete;
@@ -40,8 +35,7 @@ class SignalGuard {
4035
const int Signal;
4136
struct sigaction SAOld;
4237
}; // class SignalGuard
43-
} // namespace detail
44-
} // namespace IGC
38+
} // namespace IGC::detail
4539

4640
#define SET_SIG_HANDLER(SIG) \
4741
::IGC::detail::SignalGuard SG##SIG(SIG, signalHandler);

0 commit comments

Comments
 (0)