aboutsummaryrefslogtreecommitdiff
path: root/gdb/unittests
diff options
context:
space:
mode:
authorPedro Alves <pedro@palves.net>2021-06-17 16:16:55 +0100
committerPedro Alves <pedro@palves.net>2021-06-17 16:22:12 +0100
commit606a431366407ca2f041206dd4708450c2edc318 (patch)
tree5633ab257fb5343875cfcddb848c2c70f2f98760 /gdb/unittests
parent6a7f1c20e82c349a2d4c977a27319e895e8ca284 (diff)
downloadgdb-606a431366407ca2f041206dd4708450c2edc318.zip
gdb-606a431366407ca2f041206dd4708450c2edc318.tar.gz
gdb-606a431366407ca2f041206dd4708450c2edc318.tar.bz2
scoped_ignore_signal: Use sigprocmask+sigtimedwait instead of signal
The problem with using signal(...) to temporarily ignore a signal, is that that changes the the signal disposition for the whole process. If multiple threads do it at the same time, you have a race. Fix this by using sigprocmask + sigtimedwait to implement the ignoring instead, if available, which I think probably means everywhere except Windows nowadays. This way, we only change the signal mask for the current thread, so there's no race. Change-Id: Idfe3fb08327ef8cae926f3de9ee81c56a83b1738 gdbsupport/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * scoped_ignore_signal.h (scoped_ignore_signal::scoped_ignore_signal) [HAVE_SIGPROCMASK]: Use sigprocmask to block the signal instead of changing the signal disposition for the whole process. (scoped_ignore_signal::~scoped_ignore_signal) [HAVE_SIGPROCMASK]: Use sigtimedwait and sigprocmask to flush and unblock the signal.
Diffstat (limited to 'gdb/unittests')
0 files changed, 0 insertions, 0 deletions