diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index afe9171ff75..bb54ff82f86 100644 --- a/gdbsupport/ChangeLog +++ b/gdbsupport/ChangeLog @@ -1,3 +1,9 @@ +2021-07-05 Simon Marchi + + * scoped_ignore_signal.h (struct scoped_ignore_signal) + <~scoped_ignore_signal>: Use sigtimedwait if HAVE_SIGTIMEDWAIT + is defined, else use sigpending + sigwait. + 2021-07-05 Simon Marchi * common.m4 (GDB_AC_COMMON): Check for sigtimedwait. diff --git a/gdbsupport/scoped_ignore_signal.h b/gdbsupport/scoped_ignore_signal.h index a14c96779bf..57dd4b6d402 100644 --- a/gdbsupport/scoped_ignore_signal.h +++ b/gdbsupport/scoped_ignore_signal.h @@ -58,7 +58,6 @@ public: if (!m_was_blocked) { sigset_t set; - const timespec zero_timeout = {}; sigemptyset (&set); sigaddset (&set, Sig); @@ -66,7 +65,19 @@ public: /* If we got a pending Sig signal, consume it before unblocking. */ if (ConsumePending) - sigtimedwait (&set, nullptr, &zero_timeout); + { +#ifdef HAVE_SIGTIMEDWAIT + const timespec zero_timeout = {}; + + sigtimedwait (&set, nullptr, &zero_timeout); +#else + sigset_t pending; + + sigpending (&pending); + if (sigismember (&pending, Sig)) + sigwait (&set, nullptr); +#endif + } sigprocmask (SIG_UNBLOCK, &set, nullptr); }