commit: 7798927184eaef649e9879d81c31f283b10e1290
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 9 09:09:22 2025 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Dec 9 09:09:22 2025 +0000
URL: https://gitweb.gentoo.org/proj/steve.git/commit/?id=77989271
Do not yield new jobs when throttled due to load
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
steve.cxx | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/steve.cxx b/steve.cxx
index a25fdae..9d98dd0 100644
--- a/steve.cxx
+++ b/steve.cxx
@@ -168,6 +168,11 @@ static steve_token_availability
steve_can_give_token(steve_state *state, uint64_
/* if there is a token reserved, we give it immediately (even if load
is exceeded now) */
if (state->processes[pid].token_reserved)
return steve_token_availability::available;
+ /* if we have been throttled due to load, wait for it to time out */
+ if (state->recheck_triggered) {
+ assert(state->tokens > 0);
+ return steve_token_availability::load_exceeded;
+ }
if (state->tokens <= 0)
return steve_token_availability::no_tokens;
@@ -177,13 +182,13 @@ static steve_token_availability
steve_can_give_token(steve_state *state, uint64_
steve_get_load(state);
if (state->load_avg > state->max_load_avg) {
/* trigger a recheck if we don't have one now */
- if (!state->recheck_triggered) {
- /* TODO: make this configurable? */
- struct timeval tv = { 3, 0 };
- if (evtimer_add(state->recheck_event.get(),
&tv) == -1)
- std::print(stderr, "failed to enable
recheck timer\n");
+ assert(!state->recheck_triggered);
+ /* TODO: make this configurable? */
+ struct timeval tv = { 3, 0 };
+ if (evtimer_add(state->recheck_event.get(), &tv) == -1)
+ std::print(stderr, "failed to enable recheck
timer\n");
+ else
state->recheck_triggered = true;
- }
return steve_token_availability::load_exceeded;
}