Fixed: Stall when clearing input queue on exit and queue is >1

This commit is contained in:
aristocratos 2021-11-08 12:46:18 +01:00
parent a6dba19817
commit e4ac3d9b21
2 changed files with 8 additions and 3 deletions

View file

@ -208,7 +208,6 @@ void clean_quit(int sig) {
}
Config::write();
Input::clear();
//? Wait for any remaining Tools::atomic_lock destructors to finish for max 1000ms
for (int i = 0; Tools::active_locks > 0 and i < 100; i++) {
@ -216,6 +215,7 @@ void clean_quit(int sig) {
}
if (Term::initialized) {
Input::clear();
Term::restore();
}

View file

@ -95,7 +95,7 @@ namespace Input {
string get() {
string key;
while (cin.rdbuf()->in_avail() > 0 and key.size() < 100) key += cin.get();
if (cin.rdbuf()->in_avail() > 0) cin.ignore(cin.rdbuf()->in_avail());
if (cin.rdbuf()->in_avail() > 0) clear();
if (not key.empty()) {
//? Remove escape code prefix if present
if (key.substr(0, 2) == Fx::e) {
@ -175,7 +175,12 @@ namespace Input {
}
void clear() {
if (cin.rdbuf()->in_avail() > 0) cin.ignore(SSmax);
auto first_num = cin.rdbuf()->in_avail();
while (cin.rdbuf()->in_avail() == first_num) {
if (first_num-- == 0) break;
cin.ignore(1);
}
}
void process(const string& key) {