diff options
author | Pedro Alves <pedro@palves.net> | 2021-06-17 16:16:55 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2021-06-17 16:22:12 +0100 |
commit | 606a431366407ca2f041206dd4708450c2edc318 (patch) | |
tree | 5633ab257fb5343875cfcddb848c2c70f2f98760 /gdb/unittests | |
parent | 6a7f1c20e82c349a2d4c977a27319e895e8ca284 (diff) | |
download | gdb-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