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;
                }

Reply via email to