diff --git a/src/modules/custom.cpp b/src/modules/custom.cpp index 54fda760..f010209e 100644 --- a/src/modules/custom.cpp +++ b/src/modules/custom.cpp @@ -2,6 +2,7 @@ #include +#include #include #include @@ -50,13 +51,21 @@ void waybar::modules::Custom::delayWorker() { } thread_ = [this] { - for (int i : this->pid_children_) { - int status; - waitpid(i, &status, 0); + for (auto it = this->pid_children_.begin(); it != this->pid_children_.end();) { + int status = 0; + const auto pid = static_cast(*it); + const auto waited = waitpid(pid, &status, WNOHANG); + if (waited == 0) { + ++it; + continue; + } + if (waited == -1 && errno != ECHILD) { + ++it; + continue; + } + it = this->pid_children_.erase(it); } - this->pid_children_.clear(); - bool can_update = true; if (config_["exec-if"].isString()) { output_ = util::command::execNoRead(config_["exec-if"].asString());