Use sigint_checker_t in debug_thread_error

This commit is contained in:
ridiculousfish 2019-05-25 19:19:03 -07:00
parent ea3ad0c099
commit 5a4df9dd3a
3 changed files with 13 additions and 3 deletions

View File

@ -55,6 +55,7 @@
#include "future_feature_flags.h"
#include "global_safety.h"
#include "proc.h"
#include "signal.h"
#include "wildcard.h"
#include "wutil.h" // IWYU pragma: keep
@ -2271,9 +2272,8 @@ extern "C" {
[[gnu::noinline]] void debug_thread_error(void) {
// Wait for a SIGINT. We can't use sigsuspend() because the signal may be delivered on another
// thread.
auto &tm = topic_monitor_t::principal();
auto gens = tm.current_generations();
tm.check(&gens, {topic_t::sighupint}, true /* wait */);
sigint_checker_t sigint;
sigint.wait();
}
}

View File

@ -431,3 +431,10 @@ bool sigint_checker_t::check() {
this->gen_ = gen;
return changed;
}
void sigint_checker_t::wait() {
auto &tm = topic_monitor_t::principal();
generation_list_t gens{};
gens[topic_t::sighupint] = this->gen_;
tm.check(&gens, {topic_t::sighupint}, true /* wait */);
}

View File

@ -42,6 +42,9 @@ class sigint_checker_t {
/// Check if a sigint has been delivered since the last call to check(), or since the detector
/// was created.
bool check();
/// Wait until a sigint is delivered.
void wait();
};
#endif