commit: e796d126da679b8b7cbd8173bb96be682fb5065f
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 10 10:38:52 2026 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Jan 10 10:38:52 2026 +0000
URL: https://gitweb.gentoo.org/proj/steve.git/commit/?id=e796d126
Include waiters in SIGUSR1 report
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
src/steve.cxx | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/steve.cxx b/src/steve.cxx
index dd89412..b9fb0f3 100644
--- a/src/steve.cxx
+++ b/src/steve.cxx
@@ -969,12 +969,25 @@ static void steve_handle_sigusr1(evutil_socket_t, short,
void *userdata) {
std::print(stderr, "steve: currently {} tokens available out of {}\n",
state->tokens, state->jobs);
for (const auto &it : state->processes) {
- std::print(stderr, "{} holds {} tokens:\n",
+ std::print(stderr, " {} holds {} tokens:\n",
steve_process_id(it.first, &it.second),
it.second.tokens_held);
for (const auto &jt : it.second.running_jobs)
- std::print(stderr, " job 0x{:02x} running for {}\n",
jt.first,
+ std::print(stderr, " job 0x{:02x} running for {}\n",
jt.first,
std::chrono::duration<double>(current_time -
jt.second.start_time));
}
+
+ if (!state->waiters.empty()) {
+ std::print(stderr, " {} processes waiting for a job token (in
order):\n",
+ state->waiters.size());
+ for (const auto &it : state->waiters) {
+ if (std::holds_alternative<fuse_req_t>(it.handle))
+ std::print(stderr, " PID {} is performing a
blocking read\n", it.pid);
+ else if (std::holds_alternative<fuse_pollhandle
*>(it.handle))
+ std::print(stderr, " PID {} is polling\n",
it.pid);
+ else
+ assert(0 && "invalid waiter");
+ }
+ }
}
static void steve_handle_cuse(evutil_socket_t, short, void *userdata) {